windows和linux平台嗅探ICMP的方式和编程内容差距有点大,linux相对简单。
windows平台嗅探ICMP以嗅探ICMP数据包为例,代码如下,请详细看注释哈。 HOST="10.170.19.126" # 创建原始套接字,然后绑定在公开接口上。在windows上使用ip协议 if os.name == "nt": socket_protocol = socket.IPPROTO_IP else: socket_protocol = socket.IPPROTO_ICMP rawSocket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol) # 该选项可以让多个socket对象绑定到相同的地址和端口上 rawSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 我们调用bind方法,来绑定socket rawSocket.bind((HOST, 0)) #通过setsockopt函数来设置数据保护IP头部,IP头部我们就可以接收到 rawSocket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) # 在WIN平台上,需要设置IOCTL以启用混杂模式 if os.name == "nt": rawSocket.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)