【问题标题】:Python Sockets: receive udp packets any destinationPython Sockets:接收任何目的地的 udp 数据包
【发布时间】:2016-12-06 18:30:19
【问题描述】:

我想用在树莓派上运行的 python 编写一个数据包分析器。 它应该分析 OSC(开放声音控制)和 Art-Net(舞台灯光协议)。两者都是 UDP 数据包 - 我使用以下代码,可在此处找到:http://www.binarytides.com/python-packet-sniffer-code-linux

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)

while True:
    print s.recvfrom(65565)

如果目标 ip 是树莓派的 ip,一切正常。我想接收网络中的所有 udp 流量,还有不是发送到树莓派的数据包,以显示服务器发送到另一个客户端的数据包。

我可以在这里更改什么来做到这一点?

【问题讨论】:

  • 如果没有bind,请不要接收。 socket.IPPROTO_UDP 只接收您的数据包。什么是s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 3)s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
  • 将其更改为 s = socket.socket(socket.AF_PACKET , socket.SOCK_RAW) s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 3) s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON ) 现在出现错误: Traceback (最近一次调用最后一次): File "ArtSniffer/test.py", line 3, in s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 3) File "/usr/lib/ python2.7/socket.py",第 224 行,方法返回 getattr(self._sock,name)(*args) socket.error: [Errno 92] 协议不可用
  • 现在它可以在 Windows 下工作 - 但也没有来自“不是我的 ip”的数据包
  • 我使用wireshark 进行了故障排除,它也没有捕获具有我以外IP 的OSC 数据包。同样通过 wifi 或电缆。
  • UDP 数据包需要 2 个套接字绑定(服务器、客户端),如果您的设备(ETH)不是网关,则无法获取 UDP 数据包!因此,如果连接类型为 Point_To_Point (UDP),则无法收集数据。一些交换机克隆所有数据包并推送到所有通道(端口)(不是网关),您可以转储所有数据包。在网关之前定义一个重定向器,用于转储每个数据包(重定向器:Clients ---> Gateway ---> Your_Machine --> Gateway --> Global_interfaceClients ---> Your_machine --> Gateway --> Global_interface)。

标签: python sockets networking


【解决方案1】:

嗅探网络与嗅探传入单台机器的数据有点不同。不幸的是,嗅探网络可能需要一些基础设施更改,并且与编码无关(您的代码无需大修改仍然有用)。

观察以太网络

您需要在这里了解几个术语:collision domainbroadcast domain。如果您的整个网络都在同一个冲突域中,只需向网络添加一个嗅探器,您应该能够观察数据包(至少使用wireshark,不确定您发布的代码)。

ehternet hubs 未触及冲突域。冲突域由活动网络设备(routersswitches)分隔。广播域由路由器或VLANs 之间的交换机分隔。处于单独的冲突域中意味着您不会看到点对点数据报。处于不同的广播域意味着您不会看到广播和多播数据报。

如果整个网络连接到单个交换机,您可以在此处设置端口镜像。除了基本的交换过程之外,它还将流量从一个 ehternet 交换机端口(请注意它是物理端口,而不是 TCP/UDP 端口)复制到另一个。对于 Cisco 设备,该技术称为SPAN

多个交换机 + 路由器拓扑可能需要在设备上设置多个 SPAN。如果您有一台协调照明的机器,您可能需要在那里放置嗅探器。同样,收集网络流量需要架构决策。

观察无线网络

这可能更简单,因为这样的网络总是有一个冲突域,所以你可以从空中获取数据包。但这种开放性也让无线协议在默认情况下更加安全。因此,如果网络使用安全热点,则可能没有机会在不犯不道德的情况下进行嗅探。但是,热点是一个路由器,这个路由器可能有线连接到某个交换机。在这里您可以再次使用端口镜像。

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2011-03-19
    • 2010-12-09
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2017-06-13
    • 2015-02-17
    相关资源
    最近更新 更多