sniff.py
import socket HOST = socket.gethostbyname(socket.gethostname()) #gethostname 返回当前运行python解释器的机器名 #gethostbyname 将主机名转换成IPv4格式地址, s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) #这是socket的类型,采用raw类型的套接字,接收 IP报文, 还可以是 IPPROTO_TCP报文 s.bind((HOST, 0)) s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) # 设置给定套接字选项的值 s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) # ioctl WSAIoctl 系统接口的有限接口 print(s.recvfrom(65565)) #65565 是 bufsize的大小 # recvfrom 从套接字接收数据。返回值是一对 (bytes, address),其中 bytes 是字节对象,表示接收到的数据,address 是发送端套接字的地址 # 第一个字段里面的数据就是用wireshark看到的ip数据报 s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)



