首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自主机-> VM的nc工作(端口9050),但VM (运行服务器编写的-> )重置连接[TCP RST]从主机-> VM在同一端口(9050)

来自主机-> VM的nc工作(端口9050),但VM (运行服务器编写的-> )重置连接[TCP RST]从主机-> VM在同一端口(9050)
EN

Stack Overflow用户
提问于 2014-06-13 20:06:19
回答 1查看 555关注 0票数 1

背景信息

我正在开发一个支持网络的嵌入式设备,用于与服务器通信。因为这个服务器将运行linux (但我需要Windows工具来开发),所以为了开发的目的,我使用UbuntuServer14.04运行一个VM。

嵌入式方面对于这个问题并不重要,因为我将回到最简单的测试设置(只需将主机连接到VM上的服务器以查看TCP连接是否已建立)来进行故障排除。

网络设置

  • D-Link DIR-615运行DD-WRT v24-sp2 (03/25/13) std (SVN修订本21061),静态IPs分配给主机,VM通过MAC过滤器分配,DNS功能启用
  • 开发机器(192.168.5.117,dev.test.lan)
  • Ubuntu (192.168.5.118,vm.test.lan) -使用桥接连接(NAT不工作,因为客户端将启动到VM的连接)
  • 路由器没有连接到任何类型的广域网,只有有线连接,Wi-fi被禁用。

健康检查执行了

  • VM的ping主机成功(使用IP或dns名称)
  • 来自主机的ping VM成功(使用IP或dns名称)
  • 主机<-> VM之间的nc (可以从任何一方侦听/连接)侦听端口9050
  • 在VM中,可以通过nc连接到运行在VM上的服务器应用程序,成功地建立到端口9050的连接。
  • 为端口9050上的传入/传出TCP连接打开Windows防火墙

问题分析

使用wireshark,我能够看到TCP连接在执行nc健全性测试(主机<-> VM)时成功地工作。

当我在VM上运行服务器(使用python编写)并尝试通过nc从主机连接时,服务器看不到任何连接(但我们知道从nc到服务器的连接可以工作,因为在VM中已经成功地进行了测试)。

从wireshark,我看到主机向VM发送一个SYN,然后VM用RST、ACK进行响应。主机在放弃之前重试传输两次。

问题

  • 一个桥接连接是否是VM使用的适当设置?
  • 找出RST从哪里来的最好方法是什么?(是路由器、VMs /IP堆栈,还是Python的某些部分导致了它?)

更新:在VM中尝试了nc 192.168.5.118 9050,并观察到了相同的拒绝连接行为,就像我从主机上尝试过一样。根据亚当的说法,我们看起来越来越接近了。将尝试亚当的建议以及张贴更新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 20:24:18

操作系统正在发送RST数据包,以指示端口已关闭-没有进程绑定到它并侦听。因此,试图连接的客户端将很快与ECONNREFUSED失败(连接被拒绝)。这是完全正常的行为。

如何绑定到Python服务器进程中的端口?您是否绑定到正确的网络接口?如果您意外地只绑定到回送设备(localhost127.0.0.1),那么您将看到您所描述的确切内容:从机器到其自身的本地连接将成功,但来自外部主机的连接将失败。

在Python中,通常使用'''0.0.0.0'作为地址部分,以指示要绑定到所有网络接口;这相当于C常量INADDR_ANY

代码语言:javascript
复制
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', port))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24213113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档