【问题标题】:Listen to a port already in use for UDP packets in python?在 python 中侦听已用于 UDP 数据包的端口?
【发布时间】:2016-04-29 08:39:45
【问题描述】:

基本上我有一个程序 A,将结果(只是数据点)实时发送到另一个程序 B 来处理。每个数据点都作为 UDP 数据包在特定端口和 127.0.0.1 上发送,其中包含作为字符串的点。当B不运行时,我可以这样做

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("127.0.0.1, port))
while True:
    data, addr = sock.recvfrom(65565)

然后很明显,当 B 运行时,我得到了

[Errno 98] Address already in use

如何查看在这些端口上发送的数据包?在过去(单独的项目)我有一个数据包嗅探器使用

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

它看到了所有传入和传出的 UDP 数据包,但这似乎太过分了。我只需要查看来自特定端口的数据包。我对这个较低级别的套接字编程相当陌生。任何帮助表示赞赏

【问题讨论】:

    标签: python sockets udp sniffer


    【解决方案1】:

    你可以使用scapy:

    这是一个小例子:

    from scapy.all import *
    
    def callback(pkt):
        pkt.show()
    
    sniff(prn=callback, filter="tcp and ( port 25 or port 110)
    

    【讨论】:

    【解决方案2】:

    无论您使用哪种数据包嗅探器(无论是wireshark 还是tcpdump),您都可以设置数据包过滤器以选择特定端口。即(tcpdump 端口端口号)或(udp.port == 端口号)。

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 2017-06-04
      • 2017-09-23
      • 2013-10-13
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多