WinPCAP. Проблема при отправке пакета.

Тема в разделе "WASM.NETWORKS", создана пользователем prus, 21 фев 2009.

  1. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Всем привет.
    Столкнулся со странной пролемой.
    Хочу отправить IP пакет в сеть с помощью библиотеки WinPCAP.
    Состряпал пакет, но он отправляется в сеть только в том случае, если тип протокола в заголовке Ethernet не равен 0x0800.

    Код (Text):
    1. ...
    2.  
    3.     BYTE btPacket[SEND_PACKET_LEN] = {0};
    4.     ETHHeader EthHeader;
    5.     IPHeader IpHeader;
    6.  
    7.     if( (fp = pcap_open_live(SendDataInfo.chAdapterName, 65536, 1, 0, ErrBuf) ) == NULL )
    8.         goto END;
    9.  
    10.     EthHeader.EthDest[0] = 0x00;
    11.     EthHeader.EthDest[1] = 0x50;
    12.     EthHeader.EthDest[2] = 0x56;
    13.     EthHeader.EthDest[3] = 0xC0;
    14.     EthHeader.EthDest[4] = 0x00;
    15.     EthHeader.EthDest[5] = 0x01;
    16.  
    17.     EthHeader.EthSource[0] = 0x00;
    18.     EthHeader.EthSource[1] = 0x0C;
    19.     EthHeader.EthSource[2] = 0x29;
    20.     EthHeader.EthSource[3] = 0xAA;
    21.     EthHeader.EthSource[4] = 0x0A;
    22.     EthHeader.EthSource[5] = 0x40;
    23.  
    24.     EthHeader.EthProto = htons(0x0800); // Так не отправляет
    25.     //EthHeader.EthProto = htons(0x08FF); // Так отправляет
    26.  
    27.     ZeroMemory(&IpHeader, sizeof(IPHeader));
    28.  
    29.     IpHeader.HeaderLen = (sizeof(IPHeader) >> 2);
    30.     IpHeader.Version = 4;
    31.     IpHeader.Length = htons(sizeof(IPHeader));
    32.     IpHeader.ID = rand();
    33.     IpHeader.TTL = 255;
    34.     IpHeader.Protocol = IPPROTO_TCP;
    35.     IpHeader.Source = SendDataInfo.ulSrcIpAddr;
    36.     IpHeader.Dest = SendDataInfo.ulDstIpAddr;
    37.     IpHeader.Checksum = GetIpChecksum((USHORT*)&IpHeader, sizeof(IPHeader));
    38.  
    39.     CopyMemory(btPacket, &EthHeader, ETH_H_SIZE);
    40.     CopyMemory(&btPacket[ETH_H_SIZE], &IpHeader, IP_H_SIZE);
    41.  
    42.     pcap_sendpacket(fp, btPacket, SEND_PACKET_LEN);
    43.  
    44. ...
    45.  
    46. END:
    47.  
    48. ...
    Что не так делаю?

    Заранее благодарен!
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Наверное не правильно собрал пакет, либо структуры неправильного размера.
    Попробуй сравнить с моим.., давно писал.., так что более конкретно не подскажу.
     
  3. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Спасиб за ответ.
    У меня XP Home Edition SP3. Попробовал на XP Prof SP2 - все работает как нужно. Это получается в ОС проблема?