Вопрос или проблема
Как мне получить количество (в настоящее время) установленных 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
.
Эти команды позволят вам отслеживать соединения, обеспечивая необходимую информацию для анализа состояния сетевых приложений и их производительности.