侦听 python 中已用于 UDP 数据包的端口?

Listen to a port already in use for UDP packets in python?

基本上我有一个程序 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 数据包,但这似乎太多了。我只需要查看来自特定端口的数据包。我对这种较低级别的套接字编程还很陌生。感谢任何帮助

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

您可以使用 scapy:

这是一个小例子:

from scapy.all import *

def callback(pkt):
    pkt.show()

sniff(prn=callback, filter="tcp and ( port 25 or port 110)