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

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

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

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

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

2 ответа

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

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

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
ответ дан 16 January 2018 в 11:45

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

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
ответ дан 16 January 2018 в 11:45

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

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