【问题标题】:How to connect to a socket server on the host machine via the virtual machine?如何通过虚拟机连接到主机上的套接字服务器?
【发布时间】:2021-02-13 22:14:59
【问题描述】:

我做了端口转发:我把服务器放在虚拟机上,并将客户端从主机连接到虚拟机。效果很好。

但是现在,当我尝试反向执行此操作时,它没有。

我做的第一件事是使用以下参数进行端口转发:

  • 主机端口:35001
  • 要转发的端口:35001
  • 虚拟机ip:192.168.40.130

成功了。

之后,当我这样做时(服务器脚本,但在主机上的 cmd(shell)上):

s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.bind(("0.0.0.0",35001))

我收到此错误:

  Only one usage of each socket address (protocol/network address/port) is normally permitted

我相信那是因为有一个进程在监听 35001 端口。

在我转发端口后,VMware(NAT) 在 35001 上监听(我使用 netstat 发现)。

那么如何在宿主机上做一个服务器,让它监听35001端口,并能够从虚拟机连接到它呢?

它是windows 10 pro,python3,一个windows 7 VM。防火墙被禁用。我不想使用桥接连接。

【问题讨论】:

    标签: python sockets virtual-machine port portforwarding


    【解决方案1】:

    vmware 端口转发只是一个进程,由 vmware 服务创建,具有以下参数:

    • 它在您的主机上运行
    • 分配 TCP 端口 35001
    • 监听传入的 TCP 连接
    • 将它们转发到您的客户机 IP 的 TCP 35001

    这就是它的作用,仅此而已。

    当您开始端口转发时,此过程已启动并在您的主机上分配了 35001 TCP 端口。

    这就是主机上的 python 脚本不起作用的原因。无法再次分配主机的 35001 TCP 端口。

    VMware 创建一个虚拟网络。您的虚拟机会看到此虚拟网络。没有以太网卡属于它,但它看起来好像会。它的 IP 地址范围为 192.168.40.0-192.168.40.255。您的主机也位于此虚拟网络上,IP 可能为 192.168.40.1。您的访客机器将其视为路由器。

    这适用于仅主机、桥接或 NAT 虚拟网络类型。虚拟网络类型仅影响您的主机如何处理数据包以在虚拟网络和物理网络之间转发它们。

    要在您的主机上运行一个服务器,您可以从您的客人连接,您不需要任何端口转发。只需停止它,您的 python 脚本就会运行。然后,从您的客人那里连接 192.168.40.1:35001

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2017-11-07
      • 2013-06-02
      • 1970-01-01
      相关资源
      最近更新 更多