Всем привет. Столкнулся со странной пролемой. Хочу отправить IP пакет в сеть с помощью библиотеки WinPCAP. Состряпал пакет, но он отправляется в сеть только в том случае, если тип протокола в заголовке Ethernet не равен 0x0800. Код (Text): ... BYTE btPacket[SEND_PACKET_LEN] = {0}; ETHHeader EthHeader; IPHeader IpHeader; if( (fp = pcap_open_live(SendDataInfo.chAdapterName, 65536, 1, 0, ErrBuf) ) == NULL ) goto END; EthHeader.EthDest[0] = 0x00; EthHeader.EthDest[1] = 0x50; EthHeader.EthDest[2] = 0x56; EthHeader.EthDest[3] = 0xC0; EthHeader.EthDest[4] = 0x00; EthHeader.EthDest[5] = 0x01; EthHeader.EthSource[0] = 0x00; EthHeader.EthSource[1] = 0x0C; EthHeader.EthSource[2] = 0x29; EthHeader.EthSource[3] = 0xAA; EthHeader.EthSource[4] = 0x0A; EthHeader.EthSource[5] = 0x40; EthHeader.EthProto = htons(0x0800); // Так не отправляет //EthHeader.EthProto = htons(0x08FF); // Так отправляет ZeroMemory(&IpHeader, sizeof(IPHeader)); IpHeader.HeaderLen = (sizeof(IPHeader) >> 2); IpHeader.Version = 4; IpHeader.Length = htons(sizeof(IPHeader)); IpHeader.ID = rand(); IpHeader.TTL = 255; IpHeader.Protocol = IPPROTO_TCP; IpHeader.Source = SendDataInfo.ulSrcIpAddr; IpHeader.Dest = SendDataInfo.ulDstIpAddr; IpHeader.Checksum = GetIpChecksum((USHORT*)&IpHeader, sizeof(IPHeader)); CopyMemory(btPacket, &EthHeader, ETH_H_SIZE); CopyMemory(&btPacket[ETH_H_SIZE], &IpHeader, IP_H_SIZE); pcap_sendpacket(fp, btPacket, SEND_PACKET_LEN); ... END: ... Что не так делаю? Заранее благодарен!
Наверное не правильно собрал пакет, либо структуры неправильного размера. Попробуй сравнить с моим.., давно писал.., так что более конкретно не подскажу.
Спасиб за ответ. У меня XP Home Edition SP3. Попробовал на XP Prof SP2 - все работает как нужно. Это получается в ОС проблема?