我在Windows上使用Oracle VirtualBox。我已经设置了NAT和转发端口。
当某些转发端口与主机的端口意外冲突时,不会显示任何错误,并且所有转发的端口都会失败。
是否有可能检测到那些冲突的端口?我使用过VBoxManage工具,既没有输出消息,也没有startvm
命令的详细模式。
由于
答案 0 :(得分:2)
我建议使用netstat
和VBoxManage
的组合并解析输出。您可以在非Windows主机上轻松地将findstr
命令替换为grep
。
首先,我会在相关虚拟机上获得NAT端口列表。 VBoxManage showvminfo
命令将输出一组有关配置的信息,您可以过滤这些信息以查找NAT规则。您将需要在输出中查找主机端口和协议字段(如果已配置,可能还需要主机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上获取了连接。如果你没有得到任何输出,那么没有任何东西正在侦听该特定端口,你可以安全地启动你的VM。