Как получить число (в настоящее время) установленных TCP-соединений дляSpecific порта?

Вопрос или проблема

Как мне получить количество (в настоящее время) установленных TCP-соединений для конкретного порта?

Мне удалось получить счетчики трафика, работая, например, для исходящего RTMP.

iptables -N $CHAIN 
iptables -I OUTPUT -j $CHAIN
iptables -A $CHAIN -p tcp --sport 1935
iptables-save

Но теперь мне нужно количество текущих (не счетчик) соединений для каждого протокола.

Я могу получить общее количество с помощью:
netstat -ant | grep ESTABLISHED | wc -l

Может кто-то помочь? Я не гуру iptables.

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

До тех пор попробуйте netstat -an|grep ESTABLISHED | grep -w 1935.

У меня работает:

# netstat -ant | grep ESTABLISHED | wc -l

вывод:

общее количество соединений 22....

netstat + grep – это хороший и простой вариант для небольшого количества соединений, но если у вас огромное количество соединений, я бы рекомендовал ss, как рекомендовано на nixCraft.

Например: ss -s

Total: 78 (kernel 79)
TCP:   31 (estab 27, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 16

Transport Total     IP        IPv6
*     79        -         -        
RAW   0         0         0        
UDP   4         2         2        
TCP   31        2         29       
INET      35        4         31       
FRAG      0         0         0  

Есть еще одна команда, если вы хотите получить список IP и количество соединений, используйте

netstat -natu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

это даст вам список IP и соединений…

спасибо

ss или netstat показывают только сетевые соединения, основанные на сетевых сокетах. Это связано с соединениями, связанными с пользовательскими процессами. Если у нас есть какой-то трафик прохода, его не видно через ss или netstat. Для получения полной картины следует использовать conntrack.

Почувствуйте разницу:

  # ss -s

Transport Total      IP        IPv6
..
..
TCP        16        16        0     
 

и

# conntrack -L -p tcp | grep ESTABLISHED | wc -l
37  

37 против 16

Ответ или решение

Чтобы получить количество действующих TCP-соединений для определенного порта, вы можете использовать несколько команд в Linux. В этой статье мы рассмотрим популярные подходы с помощью инструментов netstat, ss и conntrack, а также объясним их особенности.

Использование netstat

Первая команда, которую вы можете использовать, это netstat. Этот инструмент позволяет отображать информацию о сетевых соединениях, маршрутах и т. д. Чтобы определить количество установленных соединений для определенного порта, выполните следующую команду:

netstat -ant | grep ESTABLISHED | grep -w 1935 | wc -l

Здесь:

  • -a — показывает все соединения и слушающие порты.
  • -n — выводит адреса и порты в числовом виде.
  • -t — отображает только TCP соединения.
  • grep ESTABLISHED — фильтрует только установленные соединения.
  • grep -w 1935 — ограничивает вывод соединениями, использующими порт 1935.
  • wc -l — подсчитывает количество строк, что соответствует количеству соединений.

Использование ss

Команда ss (socket statistics) является современным и более быстрым инструментом по сравнению с netstat. Она предоставляет аналогичную информацию, но с улучшенной производительностью и более детальной статистикой. Чтобы узнать количество установленных TCP-соединений на определённом порту, можете использовать следующую команду:

ss -tn state established '( dport = :1935 )'

Здесь:

  • -t — указывает, что нас интересуют только TCP соединения.
  • -n — выводит адреса и порты в числовом виде.
  • state established — фильтрует соединения, находящиеся в состоянии "установлено".
  • dport = :1935 — ограничивает результаты соединениями, где целевой порт равен 1935.

Этот подход даст вам более точные результаты, особенно при большом количестве соединений.

Использование conntrack

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

conntrack -L -p tcp | grep ESTABLISHED | grep ':1935' | wc -l

Эта команда:

  • -L — выводит список всех активных соединений.
  • -p tcp — ограничивает вывод только TCP соединениями.
  • grep ESTABLISHED — фильтрует только установленные соединения.
  • grep ':1935' — ищет соединения, где порт равен 1935.

Заключение

Каждый из этих методов имеет свои преимущества и применим в зависимости от вашей ситуации. Если вам нужно быстро получить количество соединений, netstat будет хорошей отправной точкой. Однако в условиях высокой нагрузки на сеть или когда важна производительность, лучше перейти на ss или conntrack.

Эти команды позволят вам отслеживать соединения, обеспечивая необходимую информацию для анализа состояния сетевых приложений и их производительности.

Оцените материал
Добавить комментарий

Капча загружается...