Назад | Перейти на главную страницу

Фрагмент Bash, чтобы узнать, прослушивает ли что-то порт?

Я хочу посмотреть, прослушивает ли что-то порт на локальном хосте. Я собирался использовать nc и проверьте код выхода.

Что-то вроде этого:

echo "" | nc localhost 14881
echo $?

Есть другие предложения?

lsof -i: 14881

Возможно, netstat будет лучше, потому что порт может не прослушивать localhost или он может быть заблокирован iptables:

netstat -ln  | grep :14881
echo $?

Grep завершит работу с 1, если совпадения нет. Если вам нужны только tcp и / или udp, добавьте в netstat переключатели -u или -t.

Если вы root:

netstat -lnp | grep ':14881 '

netstat -ano | egrep LISTEN | egrep tcp | egrep $ PORTNUMBER

sudo ss -lntup сообщит вам, что прослушивает TCP / UDP-соединения - вы можете фильтровать вывод по своему усмотрению (например, прослушивание 127.0.0.1, :: 1, 0.0.0.0).

Если у вас есть питон, вы также можете создать тупой сканер портов (правда, полезный только для TCP):

import socket

for p in range(1,2**16):
   try:
     s = socket.create_connection(('127.0.0.1',p))
     print "Listener on tcp/{}".format(p)
   except:
     continue

Я использую это в bash для выхода, когда никто не слушает этот порт.

$port="14881"
if [[ $(netstat -ltn | grep ":${port} " | wc -l) -eq "0" ]] ; then echo "Port $port not listened to" && exit 1; fi
  • Использование двойных скобок bash и сравнение с wc для удобства чтения.