Есть ли какая-либо команда командной строки или любой другой способ найти и перечислить занятые и свободные номера портов на моем компьютере с Linux?
Есть ли какая-либо команда командной строки или любой другой способ найти и перечислить занятые и свободные номера портов на моем компьютере с Linux?
Ответы:
Команда
netstat -antu
покажет все используемые порты tcp и udp. Вывод будет выглядеть примерно так:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Число после двоеточия в поле Local Address указывает используемый порт. Если состояние «LISTEN», это означает, что порт используется для входящих соединений. Если IP - адрес в Local Address
поле 0.0.0.0
означает входящие соединения будут приниматься на любой IP - адрес , назначенный на интерфейс - так это средство от соединения инициирующего снаружи аппарата.
Если бы он сказал, localhost
или 127.0.0.1
он будет только принимать соединения с вашей машины.
Кроме того, если вы добавите -p
параметр и запустите его как root, он покажет процесс, который открыл порт:
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd
Все, что не отображается как используемое, является бесплатным, однако пользователи (непривилегированные учетные записи) могут открывать только порты выше 1023.
-antu
можно записать как -tuna
🐟
Хороший и надежный способ проверки открытых портов - использование ss
(замена устаревших netstat
), его можно использовать в сценарии, не требуя повышенных привилегий (т sudo
. Е. ).
Использование: опция -l
для прослушивания портов, опция -n
для обхода разрешения DNS и фильтра на порте источника NN
: src :NN
(замените NN
на порт, который вы хотите отслеживать). Для получения дополнительной информации см.man ss
ss -ln src :NN
Примеры:
[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
И в скрипте, используя grep, мы можем проверить, содержит ли вывод запрашиваемый порт. Пример с портом 80 в использовании (см. Выше):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
Пример с портом 81 не используется (см. Выше)
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)
По-другому:
telnet localhost <PORT_NUMBER>
Если порт свободен, вы получите ошибку. Если порт используется, telnet подключится.
(находится на http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )