Мне бы хотелось, чтобы в 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
Или вы действительно просто хотите 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.