如何发送icmp数据包

这篇博客详细介绍了如何使用C语言构造IP和ICMP头部,创建原始套接字,填充ICMP报文段,并计算校验和,从而发送ICMP_ECHOREPLY报文。还涉及到ICMP报文的类型、代码以及在IP数据报中的封装。
摘要由CSDN通过智能技术生成
typedef   struct   iphdr   {  
   unsigned   int   version:4;   //   IP版本号,4表示IPV4   
      unsigned   int   h_len:4;   //   4位首部长度   
      unsigned   char   tos;   //   8位服务类型TOS   
      unsigned   short   total_len;   //   16位总长度(字节)      
      unsigned   short   ident;   file://16位标识   
      unsigned   short   frag_and_flags;   //   3位标志位   
      unsigned   char   ttl;   file://8位生存时间   TTL   
      unsigned   char   proto;   //   8位协议   (TCP,   UDP   或其他)   
      unsigned   short   checksum;   //   16位IP首部校验和   
      unsigned   int   sourceIP;   file://32位源IP地址   
      unsigned   int   destIP;   file://32位目的IP地址}IpHeader;    
   
    然后定义一个ICMP首部:  
  typedef   struct   _ihdr   {   
      BYTE   i_type;   file://8位类型   
      BYTE   i_code;   file://8位代码   
      USHORT   i_cksum;   file://16位校验和      
      USHORT   i_id;   file://识别号(一般用进程号作为识别号)   
      USHORT   i_seq;   file://报文序列号      
      ULONG   timestamp;   file://时间戳}IcmpHeader;    
   
   这时可以同过WSASocket建立一个原始套接口:SockRaw=WSASocket(AF_INET,   file://协议族   SOCK_RAW,   file://协议类型,SOCK_RAW表示是原始套接口  IPPROTO_ICMP,   file://协议,IPPROTO_ICMP表示ICMP数据报 NULL,   file://WSAPROTOCOL_INFO置空   0,   file://保留字,永远置为0  WSA_FLAG_OVERLAPPED   file://标志位);  注:为了使用发送接收超时设置(设置SO
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值