来自主机的nc->;VM工作(端口9050),但VM(运行用Python编写的服务器)从主机重置连接[TCP RST]->;同一端口上的虚拟机(9050)
背景信息 我正在开发一种支持网络的嵌入式设备,用于与服务器通信。由于该服务器将运行linux(但我需要Windows工具进行开发),因此出于开发目的,我正在使用Ubuntu服务器14.04运行一个VM 对于这个问题,嵌入式方面并不重要,因为我将回到最简单的测试设置(让主机连接到VM上的服务器,以查看TCP连接是否建立)进行故障排除 网络设置来自主机的nc->;VM工作(端口9050),但VM(运行用Python编写的服务器)从主机重置连接[TCP RST]->;同一端口上的虚拟机(9050),python,ubuntu,tcp,vmware,dd-wrt,Python,Ubuntu,Tcp,Vmware,Dd Wrt,背景信息 我正在开发一种支持网络的嵌入式设备,用于与服务器通信。由于该服务器将运行linux(但我需要Windows工具进行开发),因此出于开发目的,我正在使用Ubuntu服务器14.04运行一个VM 对于这个问题,嵌入式方面并不重要,因为我将回到最简单的测试设置(让主机连接到VM上的服务器,以查看TCP连接是否建立)进行故障排除 网络设置 运行DD-WRT[v24-sp2(03/25/13)std(SVN修订版21061)]的D-Link DIR-615,通过MAC过滤器分配给主机和VM的静
- 运行DD-WRT[v24-sp2(03/25/13)std(SVN修订版21061)]的D-Link DIR-615,通过MAC过滤器分配给主机和VM的静态IP,启用DNS功能
- 开发机器(192.168.5.117,dev.test.lan)
- Ubuntu虚拟机(192.168.5.118,VM.test.lan)-使用桥接连接(NAT不工作,因为客户端将启动到虚拟机的连接)
- 路由器未连接到任何类型的广域网,仅有线连接,Wi-fi已禁用
- 从VM ping主机成功(使用IP或dns名称)
- 从主机ping VM成功(使用IP或dns名称)
- 主机VM之间的nc(可以从任意一侧侦听/连接)[在端口9050上侦听]
- 在虚拟机内,可以通过nc连接到虚拟机上运行的服务器应用程序,成功建立连接[到端口9050]
- 在端口9050上为传入/传出TCP连接打开Windows防火墙
- 桥接连接是用于VM的适当设置吗
- 找出RST来源的最佳方法是什么?(是路由器、VMs TCP/IP堆栈,还是Python的某个部分造成的?)
更新:
在虚拟机中尝试了
nc192.168.5.118 9050
,观察到了与我从主机尝试过的相同的拒绝连接行为。根据亚当所说的,看起来我们越来越近了。也将尝试Adam的建议并发布更新。操作系统正在发送RST数据包,以指示端口已关闭,没有进程绑定到它并正在侦听。因此,尝试连接的客户端将很快失败,并出现ECONNREFUSED
(连接被拒绝)。这是完全正常的行为
在Python服务器进程中,您到底是如何绑定到端口的?您是否绑定到正确的网络接口?如果您意外地仅绑定到环回设备(localhost
或127.0.0.1
),那么您将完全看到您所描述的内容:从机器到自身的本地连接将成功,但从外部主机的连接将失败
在Python中,通常使用'
或'0.0.0'
作为地址部分,以指示要绑定到所有网络接口;这相当于INADR\u ANY中的C常数:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', port))
“在VM中,可以通过nc连接到VM上运行的服务器应用程序,”--在这种情况下,您用来调用
nc
的命令行是什么?如果是nc localhost 9050
,请尝试nc 192.168.5.118 9050
。那告诉我们发生了什么,太棒了。非常感谢,亚当。看起来问题在于我只遵循了为说明localhost上的基本原则而编写的指南。今天我学到了一些东西:)