2013-01-08 07:34:55 +0000 2013-01-08 07:34:55 +0000
202
202

Получить список открытых портов в Linux

Мне нужна команда Linux, чтобы перечислить все свободные открытые порты для использования в приложении

lsof -i TCP| fgrep LISTEN

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

Ответы (7)

268
268
268
2013-01-08 11:51:03 +0000
netstat -lntu

в ответ @askmish выдаст вам список сервисов, работающих в вашей системе на tcp и udp портах, где

  • -l = только сервисы, которые прослушивают на каком-то порту
  • -n = показать номер порта, не пытайтесь разрешить имя сервиса
  • -t = tcp порты
  • -u = udp порты
  • -p = имя программы

Параметр ‘p’ вам не нужен, так как вас интересует только то, какие порты свободны, а не то, какая программа на них запущена.

Этот параметр показывает только, какие порты в вашей системе израсходованы. Это не говорит вам о состоянии вашей сети, например, если вы находитесь за NAT и хотите, чтобы некоторые сервисы были доступны извне. Или если брандмауэр блокирует порт для внешних посетителей. В этом случае на помощь приходит nmap. ВНИМАНИЕ: Используйте nmap только в тех сетях, которые находятся под вашим контролем. Также есть правила брандмауэра, которые могут блокировать nmap pings, вам придется обходить с опциями, чтобы получить правильные результаты.

93
93
93
2016-06-08 20:19:05 +0000

Поскольку net-tools устарело , вы можете использовать команду ss вместо netstat, если netstat отсутствует на вашей машине:

ss -lntu

должны работать так же, как

в соответствии со встроенной справкой:

&00001

21
21
21
2013-01-08 07:45:50 +0000

Эта команда перечислит открытые сетевые порты и процессы, которым они принадлежат:

netstat -lnptu

.

Вы также можете использовать nmap для получения более детальных результатов о портах.

5
5
5
2014-11-03 04:33:36 +0000

Все открытые порты, включая ответный трафик:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
1
1
1
2019-01-16 23:21:34 +0000

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

Еще один дополнительный пункт, который следует помнить: как пользователь, вы не сможете открыть порт меньше 1024 (для этого вам понадобятся права root).

0
0
0
2019-01-16 19:51:05 +0000

Попробуйте

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' | awk 'NR>2{print $7}' | sort -n | uniq

и посмотрите на это.

0
0
0
2016-04-04 06:29:27 +0000

Следующая команда будет работать на любом Unix, который выводит в том же формате, что и Ubuntu / Debian - где локальный адрес находится в колонке 4, а вывод включает 2 заголовка строки сверху. Если любой из этих номеров отличается, подкорректируйте команду awk ниже.

Если вы хотите только IPv4:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Если вы хотите только IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Если вы хотите и то, и другое вместе:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

Команда выводит список номеров переноса, которые прослушиваются на всех интерфейсах. Если вы хотите перечислить все порты, которые прослушивают на локальном хост-интерфейсе, то используйте что-то вроде этого:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

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

6
10
5
37
11