проверка установленных портов

Является ли команда, которую я использую, неверна, чтобы проверить, что порт установлен или нет?

count=$(netstat -an | awk '$4 ~ /:'"$PORT"'$/ && $6 == "ESTABLISHED" {print $0}'| wc -l)

И взяв $count > 0 как установлено?

0
задан 16 January 2018 в 12:45

4 ответа

Ваш подход, похоже, работает, однако он не очень изящный. Я бы предпочел сделать это следующим образом:

if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then echo $PORT established else echo $PORT not established fi

Подстановка команды просто печатает список установленных хостов независимо от локали пользователя, условное выражение проверяет, находится ли $PORT в этом списке и выполняет then, если это так, и список else, если нет.

0
ответ дан 17 July 2018 в 22:55

Я не уверен, что вы подразумеваете под «взятием значения $ count> 0 как estalished?», но это похоже на действительный счет установленных соединений с данным портом. Возможно, вы захотите ограничить данный интерфейс или протокол (поэтому две разные службы, прослушивающие один и тот же порт, но на разных интерфейсах, не смешиваются).

Кроме того, вы также можете немного упростить команду :

count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')

Вместо этого вы также можете использовать lsof. lsof -i :$PORT будет отображать открытые соединения на этом порту, и вы можете использовать -n (аналогично -n в netstat) и -F T (чтобы указать только идентификатор PID, номер дескриптора файла и состояния TCP) для упрощения анализа:

lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED
0
ответ дан 17 July 2018 в 22:55

Ваш подход, похоже, работает, однако он не очень изящный. Я бы предпочел сделать это следующим образом:

if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then echo $PORT established else echo $PORT not established fi

Подстановка команды просто печатает список установленных хостов независимо от локали пользователя, условное выражение проверяет, находится ли $PORT в этом списке и выполняет then, если это так, и список else, если нет.

0
ответ дан 24 July 2018 в 13:31

Я не уверен, что вы подразумеваете под «взятием значения $ count> 0 как estalished?», но это похоже на действительный счет установленных соединений с данным портом. Возможно, вы захотите ограничить данный интерфейс или протокол (поэтому две разные службы, прослушивающие один и тот же порт, но на разных интерфейсах, не смешиваются).

Кроме того, вы также можете немного упростить команду :

count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')

Вместо этого вы также можете использовать lsof. lsof -i :$PORT будет отображать открытые соединения на этом порту, и вы можете использовать -n (аналогично -n в netstat) и -F T (чтобы указать только идентификатор PID, номер дескриптора файла и состояния TCP) для упрощения анализа:

lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED
0
ответ дан 24 July 2018 в 13:31

Другие вопросы по тегам:

Похожие вопросы: