Представьте, что в маршрутизаторе на базе Linux (дистрибутив Debian) у вас много сетевых карт. Как вывести количество открытых соединений для данной сетевой карты? (обходные пути являются приемлемыми ответами)
решение1
Опция 1
netstat | awk '$4 ~ /xxx.xxx.xxx.xxx/ { ++count } END { print count }'
Гдеxxx.xxx.xxx.xxx— это IP-адрес сетевой карты.
netstat
найдет все открытые соединенияawk
соответствует IP-адресу сетевой карты$4
говоритawk
о том, что мы будем смотреть на 4-й столбец{ ++count } END { print count }
говоритawk
подсчитывать каждый раз, когда он находит совпадение. Когда это сделано, распечатать окончательный счет.
Вариант 2
netstat | grep xxx.xxx.xxx.xxx -c
Гдеxxx.xxx.xxx.xxx— это IP-адрес сетевой карты.
netstat
найдет все открытые соединенияgrep
соответствует IP-адресу сетевой карты-c
проситgrep
подсчитать количество совпадений, а не распечатывать их.
Вариант 1 имеет преимущество в том, что он соответствует только по полю локального адреса, а не где-либо еще. Вариант 2 может дважды учитываться, если есть открытые соединения, где удаленный адрес указывает на локальный хост.
решение2
Вы не можете. Базовые IP-маршрутизаторы просто пересылают датаграммы без сохранения состояния, просматривая только уровень IP. Они ничего не будут знать о соединениях, для которых они не являются конечной точкой.
Межсетевой экран SPI или шлюз NAT — это совсем другая история.
решение3
Маршрутизатор не отслеживает соединения — вам нужно спросить об этом брандмауэр.
Брандмауэр Linux поддерживает отслеживание состояния «подключений», но по умолчанию он не обязательно активен.Еслиу вас есть что-нибудь из этого:
- правило iptables, которое использует
-m state
или-m conntrack
, - или правило nftables, которое использует
ct state
, - или любые правила в таблицах NAT iptables/nftables (например, цепочка nat/prerouting),
то система conntrack брандмауэра активна, и вы можете просмотреть ее «таблицу состояний» с помощью:
conntrack -L
Однако, поскольку это делается брандмауэром (а не маршрутизатором), состояния не имеют отношения к какому-либо конкретному интерфейсу — их интересует только адресация L3/L4.