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