python 混杂模式
import socket import os host = '10.81.226.234' def main(): # 判断系统是否为windows if os.name == 'nt': # windwos允许嗅探任何协议 socket_protocol = socket.IPPROTO_IP else: # Linux强制指定一个协议进行嗅探 socket_protocol = socket.IPPROTO_ICMP # 创建socket对象 sniffer = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket_protocol) sniffer.bind((host,0)) # 设置包含IP头 sniffer.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1) # 对windows机器 额外启用混杂模式 if os.name == 'nt': sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON) # 读取一个数据包 print(sniffer.recvfrom(65565)) # 关闭混杂模式 if os.name == 'nt': sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF) if __name__ == '__main__': main()
host变量为本机IP地址,然后创建一个socket对象,使用bind函数绑定socket对象,使用setsockopt函数修改socket设置,使其在抓包时包含IP头部。之后会判断平台是否为windows,如果是则启动网卡的混杂模式。