侦听 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)
基本上我有一个程序 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)