Кроссплатформенная проверка для используемого порта - PullRequest
0 голосов
/ 04 марта 2020

Я ищу кроссплатформенный способ проверить, используется ли порт, чтобы я мог напечатать предупреждающее сообщение.

Я выполнил это в 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 , доступные для них (но lsof, похоже, пока не работает ).

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Использование netstat (работает на windows, ma c, wsl2)

Пример netstat -a | grep :8080, где 8080 - интересующий вас порт.

Если вы на wsl1 вам нужно будет использовать netstat windows, поскольку тот, который включен в wsl, не работает. Просто установите псевдоним windows netstat перед его использованием alias netstat='/mnt/c/Windows/System32/netstat.exe'

0 голосов
/ 18 апреля 2020

Хотя я уверен, что другие ответы будут работать в определенных ситуациях, я просто хотел отметить, что в итоге я выбрал следующее решение для моей собственной работы:

if echo PING | nc localhost 8080 >/dev/null; then
  echo "Port 8080 in use"
fi
0 голосов
/ 04 марта 2020

Я не уверен, как выглядит ваша сеть, но, возможно, nmap подойдет вам. Вы можете сканировать порты для каждого p c в вашей локальной сети, используя только linux. Если порт открыт, это означает, что используется. Это решение будет работать для любой системы.

apt-get install nmap

, например, вот так:

if nmap -p 8080 <ip address> | grep -wq "open"
then
    echo "Port 8080 is already in use"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...