167

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

lsof -i TCP| fgrep LISTEN

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

7 ответов7

235
netstat -lntu

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

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

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

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

70

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

ss -lntu

должен работать аналогично

netstat -lntu

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

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets
20

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

netstat -lnptu

После этого вы можете отфильтровать результаты по вашим точным спецификациям.

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

4

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

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
0

Пытаться

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

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

0

Следующая команда будет работать на любом Unix, который выводит в том же формате, что и Ubuntu / Debian - где локальный адрес находится в столбце 4, а вывод содержит двухстрочный заголовок вверху. Если любое из этих чисел отличается, настройте команду 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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .