Как узнать количество открытых портов в linux?

17

Как узнать количество открытых портов в linux? Я хочу посмотреть, у меня не хватает портов. Кроме того, как я вижу предел моей ОС?

erotsppa
источник
2
Что вы делаете, что боитесь нехватки портов?
MDMarra

Ответы:

27

В современном linux используйте утилиту ss (socket stats).

$ ss -s
Total: 10160 (kernel 10262)
TCP:   10349 (estab 8886, closed 408, orphaned 0, synrecv 0, timewait 393/0), ports 3147

Transport Total     IP        IPv6
*         10262     -         -        
RAW       0         0         0        
UDP       5         5         0        
TCP       9941      9941      0        
INET      9946      9946      0        
FRAG      0         0         0        
Кертис Доти
источник
9
netstat -an | grep ESTABLISHED | wc -l

даст вам количество открытых портов, 32 в моем случае.

cat /proc/sys/net/ipv4/ip_local_port_range

Вернет что-то вроде:

32768 61000

что означает, 61000 - 32768 - $ OPENPORTS = AvailablePorts

На моей коробке вот это:

61000-32768-32 = 28200 доступных номеров портов.

Grizly
источник
-a46 не работал. Любая помощь?
erotsppa
какой дистрибутив у тебя работает? (это работает на сервере Ubuntu 10.04 LTS). Конечно, если у вас не установлен ipv6, просто используйте netstat -a.
Grizly
Протестировано на моей коробке CentOS, кажется, он зависает, если вы не используете "-n", чтобы остановить разрешение имен. (netstat -an | grep ESTABLISHED | wc -l)
Grizly
Просто увидел "ss" ниже, это круто, не знал об этом .. намного лучше! Используйте ip_local_port_range, чтобы определить, что ваш linux настроен для разрешения, но это показывает вам, что вы используете в настоящее время в гораздо более доступном формате!
Grizly
8

Как уже упоминалось, netstat - это инструмент, используемый для определения того, какие порты используются в настоящее время. Что касается ограничений, то число доступных портов - это 16-битное целое число без знака, которое дает вам диапазон 0-65535. Порты, доступные приложениям для привязки, являются зарезервированными привилегированными / корневыми портами (0-1024) плюс все, что не охватывается вашим эфемерным диапазоном портов.

Вы можете просмотреть свои эфемерные порты, запустив cat /proc/sys/net/ipv4/ip_local_port_range.

Чтобы это постоянно изменять, вам нужно добавить / изменить "net.ipv4.ip_local_port_range" в файле /etc/sysctl.conf или интерактивно с sysctl -n net.ipv4.ip_local_port_range="<start_port> <end_port>"

Alex
источник
1
гнида, но это не совсем предел ipv4. Это предел tcp / udp. и те бегут независимо от ipv4. (напр. ipv6 ничего не делает для транспортного уровня)
Джоэл К
Аааа, ты прав. Я удалил ссылку IPV4 в своем ответе.
Алекс
1

Лично я предпочитаю nmap. Вы можете узнать состояние всех портов, выполнив команду nmap -P 1-65535. В большинстве дистрибутивов этот пакет должен быть доступен через менеджер пакетов.

ThaKidd KG5ORD
источник
1

Пытаться

# lsof -n -i -P 

Ради полноты :)

Юрий
источник
0

netstat позволит вам увидеть, какие порты открыты, выполните команду «netstat -», чтобы увидеть, что лучше всего соответствует вашим потребностям.

jer.salamon
источник
1
netstat --inetпоможет больше всего.
Пол Томблин
Я имел в виду -? недостающий символ
jer.salamon
или прочитайте man-
страницу
Также включите --inet6 (сокращение от обоих: -4 -6), чтобы получить сокеты IPv6 и ip-независимые сокеты (последние являются значениями по умолчанию для хостов с двумя стеками, см. Rfc 3493, раздел 3.7).
Тобу
0

'nmap localhost' предоставит вам все ваши открытые порты и сервисы, работающие на них.

Вивек Варгезе Чериан
источник
1
не совсем, он будет сканировать только порты на 127.0.0.1, а не на какие-либо ненадежные IP-адреса
Лукас Кауфман,
0

netstat -tulnp

Аргументы для программы netstat перечислены ниже:

*

  t - Show TCP
*

  u - Show UDP
*

  l - Show only listening processes (netstat can show both listening and all established connections, i.e. as a client too)
*

  n - Do not resolve network IP address names or port numbers
*

  p - Show the process name that is listening on the port
Раджу
источник
0

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

netstat -lntu

Чтобы увидеть определенный статус портов, используйте следующую команду

netstat -an | grep ':6060'

замените 6060 вашим конкретным номером порта.

Самуил
источник