我正在尝试用 Python 编写一个可以接收 ICMP 数据包的套接字服务器。
这是我的代码:
s = socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.IPPROTO_ICMP)
host = socket.gethostbyname(socket.gethostname())
s.bind((host,0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
但是,我不知道如何接收数据包 - 我尝试使用 s.listen 但失败了。 我错过了什么或者我完全走错了方向?
谢谢!
最佳答案
我以前用 twisted 做过这个,我把套接字设置成这样:
import socket
def listen():
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)
s.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
while 1:
data, addr = s.recvfrom(1508)
print "Packet from %r: %r" % (addr,data)
关于Python icmp 套接字服务器(不是 tcp\udp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8245344/