Как написать сниффер http-слоя

Я хочу написать сниффер прикладного уровня (SMTP/ftp/http).

Основываясь на моих поисках, первым (и, возможно, самым сложным!) шагом является повторная сборка tcp-потока перехваченных соединений.

Действительно, мне нужно что-то вроде опции wireshark «следовать TCP-потоку», но мне нужен инструмент, который делает это в живом интерфейсе и автоматически. Насколько мне известно, Tshark может автоматически извлекать данные потоков TCP из сохраненных файлов pcap (ссылка), но не из активных интерфейсов. Может ли Tshark делать это на живых интерфейсах???

Насколько я знаю, TCPflow может делать именно то, что я хочу, однако он не может обрабатывать дефрагментацию IP и соединения SSL (я хочу проанализировать содержимое SSL в случае, если у меня есть закрытый ключ сервера).

Наконец, я также пробую сетевой монитор братана. Хотя он предоставляет список TCP-соединений (conn.log), мне не удалось получить содержимое TCP-соединений.

Любое предложение об упомянутых инструментах или любом другом полезном инструменте приветствуется.

Заранее спасибо, Дэн.


person user3162097    schedule 05.01.2014    source источник


Ответы (2)


библиотека perl Net::Inspect может вам помочь. Он также поставляется с tcpudpflow, который может записывать потоки tcp и udp в отдельные файлы, подобно tcpflow. Он работает с файлами pcap или может делать захват в реальном времени. Библиотека обрабатывает фрагментацию IP. Он также поставляется с инструментом httpflow для извлечения HTTP-запросов и ответов (включая распаковку, фрагментированное кодирование и т. д.). В настоящее время он не поддерживает SSL.

Как автор этой библиотеки, я не думаю, что извлечение потоков TCP является самой сложной частью, синтаксический анализатор HTTP (исключая декомпрессию, включая режим фрагментирования) почти в два раза больше, чем IP и TCP вместе взятые.

person Steffen Ullrich    schedule 05.01.2014

Этот пример работает для повторной сборки данных приложения одного протокола:

tshark -Y "tcp.dstport == 80" -T fields -d tcp.port==80,echo -e echo.data

Он захватывает живые данные http, собирает их и выводит в виде необработанного шестнадцатеричного кода.

Я могу добавить небольшой скрипт для разбора шестнадцатеричного кода в ascii, если хотите.

Я хочу проанализировать содержимое SSL в случае, если у меня есть закрытый ключ сервера

Вкратце: это невозможно сделать с помощью одного только инструмента захвата.

Почему бы и нет: потому что каждый сеанс SSL генерирует новый секретный ключ диалога, и вы не можете расшифровать сеанс без этого ключа. Наличие закрытого ключа сервера недостаточно. Идея заключается в том, что если кто-то перехватит ваш SSL-трафик, сохранит его, а затем через год «найдет» приватный ключ сервера, то он все равно не сможет расшифровать ваш трафик.

person Hibuki    schedule 01.03.2016