
Демультиплексор пакетов TCP/IP. Скачать с:
Директория загрузок: http://digitalcorpora.org/downloads/tcpflow/
В большинстве распространённых дистрибутивов GNU/Linux tcpflow уже есть в репозиториях. Поэтому в Debian/Ubuntu и подобных можно выполнить:
sudo apt-get install tcpflow
а в Fedora/RedHat/CentOS и подобных:
sudo dnf install tcpflow
И всё. Если по какой-то причине этого недостаточно, можно собрать из исходников:
Для компиляции под Linux
Убедитесь, что у вас есть все необходимые предварительные зависимости. В корневом каталоге есть файлы, которые сделают это за вас, в зависимости от вашей операционной системы:
CONFIGURE_ARCH_17_8.sh CONFIGURE_FEDORA_18.sh CONFIGURE_FEDORA_26.sh CONFIGURE_UBUNTU_16_04.sh
В зависимости от вашей ОС просто выполните:
# sudo bash CONFIGURE_<ВАША_ОС>.sh
После настройки ОС скомпилируйте и установите с помощью:
./configure
make
sudo make install
Если вы хотите загрузить дерево разработки через git, обязательно выполните полный checkout с --recursive, а затем запустите bootstrap.sh, configure и make:
git clone --recursive https://github.com/simsong/tcpflow.git
cd tcpflow
bash bootstrap.sh
./configure
make
sudo make install
Для загрузки и компиляции под Amazon AMI:
ssh ec2-user@<ваш экземпляр ec2>
sudo bash yum -y install git make gcc-c++ automake autoconf boost-devel cairo-devel libpcap-devel openssl-devel zlib-devel
git clone --recursive https://github.com/simsong/tcpflow.git
sh bootstrap.sh
Для компиляции под Windows с mingw на Fedora Core:
yum -y install mingw64-gcc mingw64-gcc-c++ mingw64-boost mingw64-cairo mingw64-zlib
mingw64-configure
make
Для использования CMake см. подробные инструкции: cmake/README.md
Из чистого репозитория от обычного пользователя (не root):
./bootstrap.sh # Генерирует файл ./configure
./configure # Генерирует файл tcpflow.spec
rpmbuild -bb tcpflow.spec --build-in-place
Проверьте spec-файл и полученный RPM:
rpmlint tcpflow.spec
rpmlint ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
Установка:
sudo dnf install ~/rpmbuild/RPMS/x86_64/tcpflow-....rpm
tcpflow — это программа, которая захватывает данные, передаваемые в рамках TCP-соединений (потоков), и сохраняет их в удобном для анализа протоколов и отладки виде. Каждый TCP-поток сохраняется в отдельный файл. Таким образом, типичный TCP-поток сохраняется в два файла — по одному для каждого направления. tcpflow также может обрабатывать сохранённые пакетные потоки tcpdump.
tcpflow сохраняет все захваченные данные в файлы с именами следующего вида:
[временная_меткаT]исходный_ip.исходный_порт-целевой_ip.целевой_порт[--VLAN][cNNNN]
где: временная_метка — необязательная метка времени первого пакета T — разделитель, указывающий, что временная метка была предоставлена исходный_ip — IP-адрес источника исходный_порт — порт источника целевой_ip — IP-адрес назначения целевой_порт — порт назначения VLAN — VLAN-порт c — разделитель, указывающий на наличие нескольких соединений NNNN — счётчик соединений, когда существует несколько соединений с одинаковой комбинацией [время]/исходный_ip/исходный_порт/целевой_ip/целевой_порт. Обратите внимание, что счётчик соединений редко используется, если применяется префикс временной метки.
Вот несколько примеров:
128.129.130.131.02345-010.011.012.013.45103
Содержимое указанного выше файла будет представлять данные, переданные от хоста 128.129.131.131 порт 2345, к хосту 10.11.12.13 порт 45103.
128.129.130.131.02345-010.011.012.013.45103c0005
Шестое соединение от 128.129.131.131 порт 2345, к хосту 10.11.12.13 порт 45103.
1325542703T128.129.130.131.02345-010.011.012.013.45103
Соединение от 128.129.131.131 порт 2345, к хосту 10.11.12.13 порт 45103, которое началось в 17:19 (-0500) 2 января 2012 года.
128.129.130.131.02345-010.011.012.013.45103--3
Соединение от 128.129.131.131 порт 2345, к хосту 10.11.12.13 порт 45103, которое было замечено на VLAN-порту 3.
Вы можете изменить шаблон, используемый для создания имён файлов, с помощью опций -F и -T. Если в шаблоне указан каталог, он будет создан автоматически.
При использовании опции -a tcpflow будет автоматически интерпретировать HTTP-ответы.
Если выходной файл
208.111.153.175.00080-192.168.001.064.37314,
то постобработка создаст файлы:
208.111.153.175.00080-192.168.001.064.37314-HTTP
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY
Если HTTPBODY был сжат с помощью GZIP, вы можете получить и
третий файл:
208.111.153.175.00080-192.168.001.064.37314-HTTPBODY-GZIP
Дополнительная информация об этих потоках, например их MD5-хэш,
также записывается в файл DFXML.
tcpflow похож на tcpdump в том, что оба обрабатывают пакеты из сети или из сохранённого файла. Но отличие в том, что tcpflow реконструирует фактические потоки данных и сохраняет каждый поток в отдельный файл для последующего анализа.
tcpflow понимает порядковые номера и правильно реконструирует потоки данных независимо от повторных передач или доставки не по порядку. Однако в настоящее время tcpflow не обрабатывает IP-фрагменты; потоки, содержащие IP-фрагменты, не будут записаны корректно.
tcpflow может выводить сводный отчёт в формате DFXML. Этот файл содержит информацию о системе, в которой была скомпилирована программа tcpflow, о месте её запуска, а также о каждом TCP-потоке, включая IP-адреса и порты источника и назначения, количество байтов, количество пакетов и (опционально) MD5-хэш каждого байтового потока.
tcpflow использует библиотеку захвата пакетов LBL (доступна по адресу ftp://ftp.ee.lbl.gov/libpcap.tar.Z) и поэтому поддерживает те же богатые выражения фильтрации, что и такие программы, как tcpdump. Она должна компилироваться в большинстве популярных версий UNIX; подробности см. в файле INSTALL.
tcpflow — полезный инструмент для понимания сетевых пакетных потоков и проведения сетевой криминалистики. В отличие от таких программ, как WireShark, которые показывают множество пакетов или одно TCP-соединение, tcpflow может показать сотни, тысячи или сотни тысяч TCP-соединений в контексте.
Обычное применение tcpflow — раскрытие содержимого HTTP-сессий. С помощью tcpflow можно реконструировать веб-страницы, загруженные по HTTP. Можно даже извлечь вредоносное ПО, доставленное как «загрузка по ссылке» (drive-by download).
Джереми Элсон (Jeremy Elson) первоначально написал эту программу для захвата данных, отправляемых различными программами, использующими недокументированные сетевые протоколы, в попытке обратного проектирования этих протоколов. RealPlayer (и большинство других потоковых медиаплееров), ICQ и AOL IM — хорошие примеры таких приложений. Позже программа стала использоваться для анализа HTTP-протоколов.
Симсон Гарфинкель (Simson Garfinkel) основал Sandstorm Enterprises в 1998 году. Sandstorm создала программу, похожую на tcpflow, под названием TCPDEMUX и другую версию программы под названием NetIntercept. Эти программы являются коммерческими. После ухода из Sandstorm у Симсона возникла необходимость в программе для сборки TCP-потоков. Он нашёл tcpflow и взял на себя её поддержку.
Пожалуйста, сообщайте об ошибках в трекере issues на GitHub
В настоящее время tcpflow не обрабатывает IP-фрагменты. Потоки, содержащие IP-фрагменты, не будут записаны правильно. IP-фрагментация становится всё более редким явлением, поэтому это не является существенной проблемой.
Если вы пишете статью о tcpflow, пожалуйста, цитируйте наш технический отчёт:
Simson L. Garfinkel [email protected]
Я продолжаю портировать bulk_extractor, tcpflow, be13_api и dfxml на современный C++. После изучения стандартов я решил использовать C++17, а не C++14, так как поддержка 17 сейчас широко распространена. (Вероятно, мне не нужен 20). Я остаюсь с autotools, хотя есть веские причины перейти на CMake. Я сохраняю be13_api и dfxml как модули, которые включаются (в стиле Python), а не как отдельные библиотеки для линковки. Однако я не на 100% уверен, что это правильное решение.
Проект занимает больше времени, чем ожидалось, потому что я также провожу общее рефакторинг кода. Основное, что отнимает время, — это выяснение того, как распутать все объекты C++, связанные с опциями парсера и конфигурацией.
Поскольку и tcpflow, и bulk_extractor используют be13_api, моё внимание переключилось на использование tcpflow для обеспечения работоспособности be13_api, так как это более простая программа. Сейчас я завершил примерно три четверти работы. Я ожидаю, что завершу что-то к концу 2020 года.
--- Симсон Гарфинкель, 18 октября 2020 г.
Спасибо: