跨平台检查正在使用的端口
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
我正在寻找一种跨平台的方法来检查端口是否在使用中,以便我可以打印一条警告消息。
我在 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'
虽然我确定其他答案在某些情况下会起作用,但我只是想指出,我最终为自己的工作采用了以下解决方案:
if echo PING | nc localhost 8080 >/dev/null; then
echo "Port 8080 in use"
fi