phil
Зарегистрирован: 24.08.2003 Сообщения: 32 Откуда: Санкт-Петербург
|
Добавлено: Вт Ноя 12 2002 23:50 Заголовок сообщения: ip packet |
|
|
#include #include #include typedef struct IPHeader { UCHAR iph_verlen; UCHAR iph_ver; UCHAR iph_tos; USHORT iph_length; USHORT iph_id; USHORT iph_offset; UCHAR iph_ttl; UCHAR iph_protocol; USHORT iph_xsum; ULONG iph_src; ULONG iph_dest; } IPHeader;
typedef struct IcmpHeader { BYTE i_type; BYTE i_code; USHORT i_cksum; USHORT i_id; USHORT i_seq; ULONG timestamp; }IcmpHeader;
#define ic_s sizeof(struct IPHeader)+sizeof(struct IcmpHeader)
void main() {char packet[ic_s]; WSAData wsa; SOCKET s; int on=1; sockaddr_in sockadr; WSAStartup(0x02,&wsa); sockadr.sin_family =AF_INET; s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW); setsocko pt(s,IPPROTO_IP,IP_HDRINCL, (char*)&on, sizeof(s)); IPHeader *ip_head = (struct IPHeader*)packet; IcmpHeader *icmp_head= (struct IcmpHeader*)(packet+sizeof(struct IPHeader));
ip_head->iph_verlen = 5; ip_head->iph_ver =5; ip_head->iph_protocol = IPPROTO_ICMP; ip_head->iph_length = ic_s; ip_head->iph_id = htons(0x666); ip_head->iph_offset = 0; ip_head->iph_ttl = 255; ip_head->iph_xsum = 0; ip_head->iph_tos =0; ip_head->iph_src = inet_addr("111.111.111.111"); ip_head->iph_dest=inet_addr(" 222.222.222.222");
sockadr.sin_port =htons(7); sockadr.sin_addr.s_addr=ip_head->iph_dest; icmp _head->i_type = 8; icmp_head->i_cksum= 0;
if(sendto(s,packet,ic_s,0,(struct sockaddr*)&sockadr,sizeof(sockadr))!=SOCKET_ERROR ) printf("sent");
closesocket(s);
WSACleanup();
}
Такая проблема. Хочу заспуфить ip пакет.Пакет вроде посылается,а сниффером отловить неудаётся.Может в Винде дело,хотя у меня стоит XP.
Заранее благодарен. |
|