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,如果是则启动网卡的混杂模式。

posted @ 2022-11-09 19:39  myrj  阅读(232)  评论(0编辑  收藏  举报