Python icmp 套接字服务器(不是 tcp\udp)

标签 python sockets

我正在尝试用 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/

相关文章:

python - Tensorflow 中的超参数优化

python - 在同一个 Django 管理页面中添加外键相关实体

java - 无法将数据从 C# 发送到 Java (Android) 程序

winapi - 在 P2P 应用程序中确定本地 IP 地址

c# - C# (async ctp/.net 4.5) 中的异步递归是否安全?

如果客户端停止(SIGSTOP),Python TCP 服务器将永远阻止发送给客户端

python - 惯用方式管理Docker中的持久数据存储

python - 获取 django 的最新条目

python - 一个设备可以有两个 UMDF 驱动程序吗?

wcf - 更改 WCF net.tcp 绑定(bind)上的套接字选项