python实现windows和linux上的包嗅探

python实现windows和linux上的包嗅探

源于《python黑帽子 黑客与渗透测试编程之道》第三章:windows和linux上的包嗅探

import socket
import os

# 监听的网卡 ps: windows下用0.0.0.0会报错
host = "192.168.0.117"

# Windows和Linux的区别是Windows允许我们嗅探所有协议的所有数据包(IP),但Linux只能嗅探到ICMP数据。(ICMP)
if os.name == "nt":     # Mac的os.name==posix
    socket_protocol = socket.IPPROTO_IP
else:
    socket_protocol = socket.IPPROTO_ICMP
# 创建一个套接字,这三个参数含义为:IPv4、原始套接字、协议
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平台上,需要设置IOCTL以启动混杂模式,以允许嗅探网卡上经过的所有数据包(即使数据的目的地址不是本机)
if os.name == "nt":
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
print(sniffer.recvfrom(65565))

# 在Windows平台上关闭混杂模式
if os.name == "nt":
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

还有一个问题,这段代码如果是在windows下使用的话,必须用管理员方式运行,否则会报错误10013

猜你喜欢

转载自blog.csdn.net/complay_ly/article/details/82823262