Назад | Перейти на главную страницу

Есть ли простой инструмент командной строки для анализа пакетов одной командой в Linux?

Мне бы хотелось, чтобы в Linux существовал единственный инструмент командной строки для анализа пакетов одной командой. что-то вроде sniff dumpfile command так что вы можете просто запустить команду, которую вы хотите обнюхивать в терминале, и получить дамп пакетов в другом месте.

Я хотел бы выгрузить / сохранить / просмотреть только сетевой трафик одной вводимой мной команды, а не весь TCP-трафик в моем единственном сетевом интерфейсе. Итак, если я вошел в свой компьютер и IRC работал в фоновом режиме, а я сделал sniff somefile wget http://www.google.com, Я бы хотел увидеть весь сетевой трафик, который команда wget сделала для загрузки http://www.google.com. Я не хочу, чтобы "somefile" сбивал с толку сетевой трафик IRC.

Существует множество команд linux / unix, которые принимают разные команды и делают что-то другое. Из sudo (запустить как суперпользователь), nice изменить хороший уровень, trickle (ограничить пропускную способность команды)

Я ничего не знаю, но теоретически получить что-то подобное не составит труда. Strace можно использовать для перехвата сетевых системных вызовов.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Это даст вам информацию о данных, передаваемых между ядром и процессом. Вывод strace - не совсем то, что вам нужно. Однако strace использует системный вызов ptrace для перехвата системных вызовов. Можно было бы написать программу, которая выводила бы данные с большей пользой.

Кроме того, вы также можете перехватить полезный сокет, привязать и прослушать системные вызовы. Можно было бы написать небольшую программу, которая использовала бы ptrace для этих вызовов и libpcap для динамического изменения фильтра захвата каждый раз при открытии нового сокета.

Tracedump

Tracedump - это сниффер IP-пакетов для одного приложения, который захватывает все TCP- и UDP-пакеты одного процесса Linux.

Скачать и описание здесь: http://mutrics.iitis.pl/tracedump

Научитесь использовать выражения фильтра.

Хотя это не приведет к тому, что вы просите о причудливых трассировках.

Это позволит вам удалить из захвата почти все «запутанные вещи, такие как IRC».

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

Попробуйте Wireshark - команда будет tshark

  • tshark позволяет вам выбирать фильтры для трафика, захваченного с интерфейса
  • используйте другие утилиты, такие как debian lsof для определения типа коммуникации, осуществляемой вашим интересующим приложением.

Или вы действительно просто хотите LSOF?


Я не думаю, что есть инструмент, который будет динамически фильтровать все сообщения, связанные с процессом. Однако вы можете попробовать отслеживать взаимодействие процесса с помощью таких инструментов, как lsof и если у вас есть хороший фильтр, который может изолировать обмен данными этого процесса от всего остального трафика, работающего в вашей системе, вы можете получить правильный захват.

Например, с wget обычно IP-адрес назначения отличается от трафика, связанного с другим процессом. Даже если взять что-то вроде skype диапазон портов назначения обычно фиксирован для экземпляра.


Это немного похоже на принцип неопределенности. Обычно вы можете знать какие проходит через набор каналов связи (со сниффером, фильтрующим идентифицированную группу потоков), или где создаются разные каналы связи (с lsof).

Я действительно хотел бы знать, можно ли сделать и то и другое для приложения. Я думаю, это возможно. Но я еще не видел, чтобы какой-либо инструмент делал это.

В частности, для веб-браузера / веб-страницы что-то вроде подключаемого модуля Firebug для Firefox может предоставить вам некоторую информацию, которую вы ищете: http://getfirebug.com/net.html

Для более общих приложений вам может потребоваться использовать netstat для определения портов, используемых приложением, а затем Wireshark / tshark / dtrace с фильтром для захвата только этого трафика. Но это не тот ответ, который вы искали ...

Одна идея, попробуйте VMWare

-настройка vm
-конфигурировать эту виртуальную машину для использования определенного интерфейса
-sniff на этом интерфейсе от хоста (это похоже на атаку человека в середине)

Если вы определите, какие сетевые приложения работают на этой виртуальной машине, у вас может быть свой ответ

Я полагаю, что более идеальное решение - это делать то, что делает VMWare, с точки зрения того, как она определяет, как она выбирает интерфейс для обсуждения. Я думаю, что его магия исходит от модулей ядра, которые он использует, в данном случае, вероятно, от модуля ядра vmnet.

Насколько мне известно, приложения не знают, о каком интерфейсе они говорят, и я считаю, что это сделано намеренно; им не следует беспокоиться о таких вещах.

Более того,
Возможно, программа уже существует, не знаю. Но если бы он был написан, вы могли бы назвать его nettrace (например), а использование могло бы выглядеть как

программный интерфейс nettrace

затем обнюхайте интерфейс, который он использует, и добавьте маршруты (возможно, он сделает это автоматически) к вашему реальному интерфейсу

Предполагая, что вы единственный человек в коробке, который пытается подключиться к Google в то время, я бы подумал, что что-то вроде этого должно помочь:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Если вы не единственное соединение, которое пытается подключиться к Google на коробке, то, если вы можете определить IP / порт, с которого вы подключаетесь, вы также можете указать src port / src ip.

Определение порта src может быть проблемой, если вы не можете указать его на любом используемом клиенте. Я не уверен, что вы сможете использовать wget.

Я сильно подозреваю, что вы можете указать порты src и dst с помощью netcat Так что, если бы вас действительно интересовал Google, вы могли бы выполнить GET (вручную) через netcat.

Конечно, справочная страница даст вам подробности

На странице руководства tcpdump и на многих веб-сайтах приведены подробные примеры фильтров, и есть даже несколько онлайн-репозиториев выражений фильтров tcpdump. Он должен уметь делать почти все, о чем вы можете мечтать, при условии, что вы знаете что-то о сетевом трафике (источник, пункт назначения, порты, протоколы и т. Д.), Помимо того, какая программа его генерирует.

Если вы работаете на сервере или безголовом компьютере, вы всегда можете заставить tcpdump записать файл дампа, а затем открыть его в Wireshark на своей рабочей станции и получить расширенную фильтрацию и графический интерфейс.

Возможно, этот скрипт сделает то, что вы хотите, с соответствующими изменениями команды tshark:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Прочтите файл дампа позже:

tshark -r dump

Dtrace должен разрешить это, хотя я еще не знаю, полностью ли он вошел в Linux.