我在 Windows 上使用 Oracle VirtualBox。我已经设置了 NAT 和转发端口。
当某些转发端口意外与主机端口冲突时,不会显示任何错误,并且所有转发端口都会失败。
是否有可能检测到那些冲突的端口?我使用了 VBoxManage 工具,但 startvm
命令既没有输出消息,也没有详细模式。
谢谢
最佳答案
我建议结合使用 netstat
和 VBoxManage
并解析输出。您可以在非 Windows 主机上轻松地将 findstr
命令替换为 grep
。
首先,我会获得相关虚拟机上的 NAT 端口列表。 VBoxManage showvminfo
命令将输出一堆有关配置的信息,您可以过滤这些信息以仅查找 NAT 规则。您将需要在输出中查找主机端口和协议(protocol)字段(如果配置的话可能还有主机IP),因为这就是您要查看的内容已经在使用。
C:\>vboxmanage showvminfo Linux | findstr Rule
NIC 1 Rule(0): protocol=tcp, host ip=, host port=2222, guest ip=, guest port=22
第二,使用上面的信息,我知道我需要检查是否有任何内容正在监听 TCP 端口 2222,因此我可以使用 netstat
命令来显示所有监听套接字,按我的标准过滤:
C:\>netstat -an | findstr LISTENING | findstr TCP | findstr 2222
Proto Local Address Foreign Address State
TCP 0.0.0.0:2222 0.0.0.0:0 LISTENING
因为我的 guest 已经在运行,所以我可以看到它已经在 TCP 2222 上获取了连接。如果您没有得到任何输出,则说明该特定端口上没有任何内容正在监听,您可以安全地启动虚拟机。
关于networking - 检测虚拟机上冲突的转发端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114410/