我试过了:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW,socket.IPPROTO_IP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.bind(('', 69))
while True
try :
databuffer, (raddress, rport) = s.recvfrom(1024)
except socket.timeout:
logging.error("Write timeout on socket")
continue
但结果显示什么也没收到(没有包裹!)在数据缓冲区中。但我用的是Wireshark真的抓到了这些包! 我找到了一些解决办法:How Do I Use Raw Socket in Python? 最后一个例子展示了如何在Windows上用原始套接字编写一个非常简单的网络嗅探器。此示例需要管理员权限才能修改接口:
^{pr2}$我的:
HOST = socket.gethostbyname(socket.gethostname())
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.bind((HOST, 69))
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
它起作用了!但还有另一个问题:本地69号港!在
s.bind((HOST, 69))
捕获的数据包都来自端口0,但不是69!在
我想知道有没有更好的方法可以做到这一点。在
在操作系统上:WindowsServer2003R2标准版sp2-32位 python 2.7.1
目前没有回答
相关问题 更多 >
编程相关推荐