Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 跨平台检查正在使用的端口_Windows_Bash_Macos_Port_Windows Subsystem For Linux - Fatal编程技术网

Windows 跨平台检查正在使用的端口

Windows 跨平台检查正在使用的端口,windows,bash,macos,port,windows-subsystem-for-linux,Windows,Bash,Macos,Port,Windows Subsystem For Linux,我正在寻找一种跨平台的方法来检查端口是否正在使用,以便打印警告消息 我在macOS中实现了这一点: 如果lsof-Pi:8080-sTCP:LISTEN-t>/dev/null;然后 echo“端口8080已在使用” fi 但是这个bash脚本也需要在Windows机器上工作。我在看类似于netstat-aon | find“8080”,但我不确定如何在我的脚本中使用它(没有Windows机器) 有没有一种有效的方法可以做到这一点?如果有帮助的话,Windows机器可以使用(但lsof似乎不可

我正在寻找一种跨平台的方法来检查端口是否正在使用,以便打印警告消息

我在macOS中实现了这一点:

如果lsof-Pi:8080-sTCP:LISTEN-t>/dev/null;然后
echo“端口8080已在使用”
fi
但是这个bash脚本也需要在Windows机器上工作。我在看类似于
netstat-aon | find“8080”
,但我不确定如何在我的脚本中使用它(没有Windows机器)


有没有一种有效的方法可以做到这一点?如果有帮助的话,Windows机器可以使用(但lsof似乎不可用)。

我不确定您的网络是什么样子,但也许nmap将是您的解决方案。您可以仅使用linux扫描本地网络中每台pc的端口。 如果端口打开,则表示正在使用该端口。此解决方案适用于任何系统

apt-get install nmap
例如:

if nmap -p 8080 <ip address> | grep -wq "open"
then
    echo "Port 8080 is already in use"
fi
如果nmap-p8080 | grep-wq“打开”
然后
echo“端口8080已在使用”
fi
使用
netstat
(适用于windows、mac和wsl2)

示例
netstat-a | grep:8080
其中8080是您感兴趣的端口


如果您使用的是wsl1,则需要使用windows netstat,因为wsl中包含的netstat已损坏。在使用windows netstat之前,只需为其设置一个别名
别名netstat='/mnt/c/windows/System32/netstat.exe'

,虽然我确信其他答案在某些情况下会起作用,但我只想指出,我最终为自己的工作使用了以下解决方案:

if echo PING | nc localhost 8080 >/dev/null; then
  echo "Port 8080 in use"
fi

批处理脚本不是跨平台的。你为什么想要这个?Bash,而不是Batch:)我也更新了我的帖子,注意到WSLthank you的存在!我只是旋转了一下,它似乎挂了很长一段时间——长达30秒。这仅仅是因为有很多端口需要检查吗?有没有办法加快速度?这可能与名称解析有关尝试使用标志
-an
,这样您只显示数字格式这已经内置到Netcat中,带有一个特殊用途的标志!只需执行
nc-zlocalhost 8080
。也不会建立连接,它只会检查端口是否打开。