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

Cross-platform check for port in use

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

我在 macOS 中完成了这个:

if lsof -Pi :8080 -sTCP:LISTEN -t >/dev/null; then
  echo "Port 8080 is already in use"
fi

但是这个 bash 脚本也需要在 Windows 机器上运行。我在看类似 netstat -aon | find "8080" 的东西,但我不确定如何在我的脚本中使用它(没有 Windows 机器)。

有没有有效的方法来做到这一点?如果有帮助,Windows 台机器有 WSL available to them (but lsof doesn't appear to work yet).

我不确定您的网络情况如何,但 nmap 可能是适合您的解决方案。您可以仅使用 linux 扫描本地网络中每台电脑的端口。 如果端口是开放的,那意味着正在使用中。此解决方案适用于任何系统。

apt-get install nmap

例如这样的:

if nmap -p 8080 <ip address> | grep -wq "open"
then
    echo "Port 8080 is already in use"
fi

使用 netstat(适用于 windows、mac、wsl2)

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

如果您使用的是 wsl1,则需要使用 windows netstat,因为 wsl 中包含的那个已损坏。在使用 alias netstat='/mnt/c/Windows/System32/netstat.exe'

之前,只需为 windows netstat 设置一个别名

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

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