如何通过虚拟机连接到主机上的套接字服务器?

时间:2020-10-31 19:12:41

标签: python sockets virtual-machine port portforwarding

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

但是现在,当我尝试反向操作时,却没有。

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

  • 主机端口:35001
  • 前进港口:35001
  • 虚拟机ip:192.168.40.130

成功完成。

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

app.use("/views2", express.static(__dirname + "/views2"));

我收到此错误:

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

我相信这是因为在端口35001上监听了一个进程。

在转发端口后,这是VMware(NAT)在监听35001(我使用netstat找出来了)。

那么如何在主机上建立服务器,使其侦听端口35001,并能够从虚拟机连接到服务器?

它是Windows 10专业版,python3,Windows 7虚拟机。防火墙已禁用。我不想使用桥接连接。

1 个答案:

答案 0 :(得分:0)

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。您的来宾计算机将其视为路由器。

对于仅主机,桥接或NATted虚拟网络类型来说是这样。虚拟网络类型只会影响主机对数据包的处理方式,从而在虚拟网络和物理网络之间转发数据包。

要在主机上运行服务器(您可以从客户机连接),则不需要任何端口转发。只需将其停止,即可运​​行您的python脚本。然后,从您的来宾连接192.168.40.1:35001