【问题标题】:nc from host -> VM works (port 9050), but VM (running server written in Python) resets connection [TCP RST] from host -> VM on same port (9050)来自主机的 nc -> VM 工作(端口 9050),但 VM(用 Python 编写的运行服务器)重置来自主机 -> VM 在同一端口(9050)上的连接 [TCP RST]
【发布时间】:2014-08-04 11:21:24
【问题描述】:

背景信息

我正在开发一种支持网络的嵌入式设备,旨在与服务器进行通信。因为该服务器将运行 linux(但我需要 Windows 工具进行开发),所以我正在运行一个带有 Ubuntu Server 14.04 的 VM 用于开发目的。

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

网络设置

  • 运行 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 VM (192.168.5.118, vm.test.lan) - 使用桥接连接(NAT 不起作用,因为客户端将启动与 VM 的连接)

  • 路由器未连接到任何类型的 WAN,仅有线连接,Wi-fi 已禁用

已执行健全性检查

  • 从 VM ping 主机成功(使用 IP 或 dns 名称)

  • 从主机 ping VM 成功(使用 IP 或 dns 名称)

  • 主机之间的nc VM(可以从任一端监听/连接)[监听端口9050]

  • 在 VM 内,可以通过 nc 连接到 VM 上运行的服务器应用程序,连接已成功建立 [到端口 9050]

  • 为端口 9050 上的传入/传出 TCP 连接打开 Windows 防火墙

问题分析

使用 wireshark,我可以在执行 nc 健全性测试(主机 虚拟机)时看到 TCP 连接成功运行。

当我在 VM 上运行服务器(用 python 编写,使用 asyncio)并尝试从主机通过 nc 连接时,服务器看不到任何连接进入(但我们知道从 nc 连接到服务器工作正常,因为它已在 VM 内部成功测试)。

从 wireshark 我看到主机向 VM 发送 SYN,之后 VM 以 [RST, ACK] 响应。主机在放弃前重试传输两次。

问题

  • 桥接连接是否适合用于 VM 的设置?

  • 找出 RST 来源的最佳方法是什么? (是路由器、虚拟机 TCP/IP 堆栈,还是 Python 的某些部分造成的?)


更新: 在虚拟机中尝试nc 192.168.5.118 9050 并观察到与我从主机尝试过的相同的拒绝连接行为。根据亚当所说的,看起来我们越来越近了。也会尝试 Adam 的建议并发布更新。

【问题讨论】:

  • "在 VM 内,可以通过 nc 连接到运行在 VM 上的服务器应用程序," -- 确切地说,您用来调用 nc 的命令行是什么?案子?如果是nc localhost 9050,请改用nc 192.168.5.118 9050。然后告诉我们发生了什么。

标签: python ubuntu tcp vmware dd-wrt


【解决方案1】:

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

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

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

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', port))

【讨论】:

  • 太棒了。非常感谢,亚当。看起来问题在于我遵循了仅在 localhost 上说明基本原理的指南。我今天学到了一些东西:)
猜你喜欢
  • 1970-01-01
  • 2020-08-05
  • 2019-08-05
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多