Как посчитать SYN / ESTABLISHED соединение с сервером? - PullRequest
1 голос
/ 13 января 2012

Я хочу получить номер SYN и УСТАНОВЛЕННОЕ подключение к моему серверу с C / C ++.Но я не хочу вызывать popen для запуска netstat или любой другой команды Linux.Мне удалось отсканировать / proc / net / ip_conntrack и получить числа.Но я понимаю, что сканирование ip_conntrack требует больших ресурсов, каждый раз, когда мое приложение вызывает этот метод.Есть ли другой простой способ?

1 Ответ

2 голосов
/ 13 января 2012

Сканирование /proc/net/ip_conntrack не надежно, потому что оно работает, только если включен сетевой фильтр / отслеживание соединения.И он не только считает соединения с вашего сервера, но также и через ваш сервер (если он действует как маршрутизатор).

Лучше было бы получить информациюв тех же местах, что и netstat: /proc/net/tcp, /proc/net/tcp6 (и аналогичные файлы для UDP и других протоколов, если вы заботитесь о них).Эта сумма более или менее соответствует значению netstat внутри вашего приложения.Вы должны задаться вопросом, стоит ли это того.Кроме того, можно (более или менее) переносить вызов netstat, в то время как непосредственное чтение этих файлов зависит от Linux.

Я знаю, что вы обеспокоены ресурсами, необходимыми для сканирования полной таблицы каждый раз, но я неНе думаю, что есть слово «подписаться» и получать уведомления, когда новые соединения установлены или разорваны.Самым близким, что я могу придумать, было бы прослушивание сетевого интерфейса (используя libpcap) и отслеживание настроек и разрывов соединений самостоятельно.

...