我有一个服务器正在监听从远程位置接收的UDP流量,我没有访问客户端代码,但我可以使用WS确认服务器接收到的UDP数据包的连续流,我当前的目标很简单,使用PyCharm转储UDP流量。以下是我目前拥有的小代码:
import socket
ip = 'x.x.x.x'<-- Masked the IP for security reason but that IP is the public IP of my server.
port = 3659
UDPServerSocket = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM)
server_address = (ip, port)
UDPServerSocket.bind(server_address)
print("Listening for UDP")
while True:
data, address = UDPServerSocket.recvfrom(1024)
print("Server received: ", data.decode('utf-8'))
侦听时,代码只是挂起recvfrom命令,因为它不检测正在接收的流量,同时WS确实看到入站流量,并且目的地与代码中的服务器IP匹配:
当PyCharm运行时,我也可以使用tcpview确认它是否监听了正确的端口:
所以WS可以毫无问题地接收流量,我可以确认PyCharm正在侦听正确的接口/端口,但是没有检测到任何流量,这可能是因为流量是从远程位置接收的吗?我看到的所有示例都使用本地地址/环回。
抱歉,如果这是一个很大的写作,谢谢你的人读这通过,我会确保至少竖起大拇指,无论谁可能有一个解决方案给我,谢谢。
2条答案
按热度按时间n1bvdmb61#
屏幕截图显示数据包从端口3659发送到端口25208。为了接收数据包,您需要绑定到端口25208(接收方),而不是像当前那样绑定到端口3659(发送方)。
请注意,此代码必须在服务器端运行,而不是在实际的服务器上运行,即正常的套接字不能用于获取数据包,而另一个套接字也可以获取相同的数据包。
jhkqcmku2#
我不相信你是告诉创建的套接字监听UDP。
尝试
socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)