Python: как рассчитать полученные и отправленные данные между двумя ipaddresses и портами

Я предполагаю, что это программирование сокетов. Но я никогда не занимался программированием сокетов, ожидая запуска примеров учебников во время изучения Python. Мне нужно больше идей для реализации этого.

Что мне конкретно нужно, так это запустить программу мониторинга сервера, которая будет опрашивать или прослушивать трафик, передаваемый с разных IP-адресов через разные популярные порты. Например, как мне получить данные, полученные и отправленные через порты 80 из 192.168.1.10 и 192.168.1.1 (который является шлюзом).

Я проверил ряд готовых инструментов, таких как MRTG, Bwmon, Ntop и т. Д., Но, поскольку мы рассматриваем некоторые конкретные исследования, нам необходимо выполнить сбор данных в рамках программы.

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

Мы хотели бы найти способ сделать все это с помощью Python....

2 ответа

Решение

Вы, вероятно, хотите использовать Scapy для этого. Просто прослушайте весь Ethernet-трафик на определенном интерфейсе, отбросьте все, что не является TCP и не соответствует порту.

Не уверен, что scapy уже может отслеживать TCP-соединения (например, распознавать повторяющиеся порядковые номера, извлекать только поток полезной нагрузки), но я думаю, что это возможно, и если нет, то не так уж сложно собрать достаточно хороший трекер TCP-соединений, который работает на 95% трафика.

Альтернативой может быть непосредственное использование сокетов (ищите необработанные сокеты) или libpcap, что может быть сделано из Python. Вы также можете проверить синтаксис фильтров в инструменте командной строки tcpdump, возможно, он может делать то, что вы уже хотите.

Могу поспорить, что для этого есть более специализированные высокоуровневые инструменты, но я их не знаю.

PS: если вы еще не знаете wireshark, посмотрите его и сначала поиграйте с ним. Он может следовать потокам TCP и научит вас, что означает отслеживание TCP-соединений. Может быть, его двоичный файл командной строки, tshark, может быть использован для извлечения потоков TCP для того, что вы хотите.

IPTraf - это инструмент мониторинга IP LAN на основе ncurses. Имеет возможность генерировать сетевую статистику, включая TCP,UDP,ICMP и некоторые другие.

Так как вы думаете выполнить его из python, вы можете использовать screen (менеджер экрана с эмуляцией терминала VT100/ANSI) для преодоления проблем с ncurses, и вы можете передать параметры регистрации и интервалов в IPTraf, что заставляет iptraf регистрироваться в файл в заданном интервале. Немного сложно, но в конечном итоге вы можете получить то, что ищете, просто проанализировав файл журнала.

Другие вопросы по тегам