[英]UDP connection refused
这就是我想要做的:
我有一台 Windows 计算机和一台 Linux 计算机(ubuntu 16.10)连接到同一个无线路由器。 路由器未连接到 Internet,因为这可能会引起一些安全问题(并且我们不希望 Windows 计算机与网络通信)。
Windows 计算机正在运行一个程序,该程序应该将数据流式传输到 UPD 端口(比如端口 1234)。 使用 Microsoft TCPView 实用程序我可以看到 windows 机器打开了端口。 事实上,它应该允许来自任何 IP 地址和任何端口的连接(这就是 TCPView 中 * 的意思)。
当我尝试使用 nmap 从 Linux 计算机上找到 Windows 机器上的开放端口时,会发生以下情况:
Starting Nmap 7.01 ( https://nmap.org ) at 2017-01-30 16:50 EST
Nmap scan report for 192.168.0.164
Host is up (0.051s latency).
PORT STATE SERVICE
1510/udp open|filtered mvx-lm
MAC Address: 74:DE:2B:D8:26:24 (Liteon Technology)
至少,这告诉我linux机器可以看到windows机器(我也可以ping通)。 但是,我不确定端口的打开|过滤状态。 根据 Nmap 手册:
当 Nmap 无法确定端口是否处于这种状态时
端口已打开或已过滤。 对于开放端口没有响应的扫描类型,会发生这种情况。 缺少响应也可能意味着数据包过滤器丢弃了探测或它引起的任何响应。 所以 Nmap 不能确定端口是打开还是被过滤了。 UDP、IP 协议、FIN、NULL 和 Xmas 扫描以这种方式对端口进行分类。
当我尝试使用 Python 连接到端口时,发生错误。 这段代码
import socket
UDP_IP = "192.168.0.164"
UDP_PORT = 1234
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
导致错误“连接被拒绝”。 一个应该读出流数据的小 C++ 客户端程序也无法连接到端口。 我现在正在使用 Python 来更快地测试端口的可访问性。
相反,连接到 TCP 端口 8080 工作正常。 此外,我一直在通过其他机器之间的同一路由器并使用一系列端口通过 TCP 来回发送数据。
其他重要信息:
所以,我的问题是:
您忘记了 UDP 不是基于连接的协议。 它是一种数据报协议。
无法区分接收 UDP 数据包但不响应它们的服务器与防火墙后面丢弃这些数据包的服务器。 这就是 nmap 将端口描述为open|filtered
——它无法区分。
您对sock.bind
调用失败,因为您试图绑定(即开始侦听数据包!)到远程 IP 上的端口。 这在一般情况下是不可能的。
原来我的问题有两方面
1) 我确实对 UDP 协议的理解很差。 这已经被论坛中的答案纠正了。 对于任何对如何使用 UDP 和 Python 在两台计算机之间进行通信感兴趣的人,请参阅此秘籍: http : //code.activestate.com/recipes/578802-send-messages-between-computers/
2)我试图与之通信的windows程序无法用于通过wifi通过UDP发送数据。 为什么? 我不知道。 我打电话给开发商,他是这么告诉我的。
当前状态:问题未解决,但被诊断为我缺乏知识和异质 Windows 程序的组合(请参阅我上面的原始帖子)
您正在尝试绑定到非本地 IP 地址。 使用 0.0.0.0 而不是您正在使用的目标地址,并使用connect()
或sendto()
目标地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.