我正在尝试创建一个python网络嗅探脚本,它将获取我需要记录的某些流量。 到目前为止,我还没有能够嗅到任何东西,但ICMP数据包很奇怪,因为相同的代码在linux上工作正常。 Python版本是2.7.5
python代码:
import socket
#create an INET, STREAMing socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind(('', 0))
# receive a packet
while True:
print "Sniffing"
packet = s.recvfrom(65565)
print packet
任何帮助将不胜感激:)
编辑:
我尝试将创建套接字的行改为:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
这没有给我任何结果。当我改变这一行:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
我的结果看起来很像我使用上面的代码。
然后我尝试了这个:
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x800))
但后来我收到一条错误消息" AttributeError:' module'对象没有属性' PF_PACKET'"
我还尝试使用this tutorial提取协议,并得到所有包都使用协议1(ICMP)。我在Red Hat和Ubuntu系统上运行了上述所有解决方案,没有任何问题。
我试图将依赖项保持在最低限度,所以我更喜欢使用套接字而不是第三方库: - )