Я хочу простой способ показать все данные TCP (не заголовки TCP или что-либо еще), проходящие через любой интерфейс на моем компьютере с Linux.
Например, я хочу волшебную команду, которая, если я сделаю:
magic_commmand_I_want port=1234
затем, если на моей машине был сервер, прослушивающий порт 1234, и кто-то сделал:
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port
Тогда магическая команда просто распечатает:
hello
Я пробовал "tcpdump", "ethereal", "tethereal", "tshark" и другие, но не совсем понятно, как их получить:
- не показывать IP-адреса или другие метаданные
- показывать только отправляемые «данные», а не отдельные пакеты и их заголовки
- печатать данные как есть, не в шестнадцатеричном виде и не с маркерами смещения пакетов
- прослушивать весь сетевой трафик (будь то на eth0 или eth1 или lo и т. д.)
Да, вы могли бы, вероятно, связать воедино переданный набор команд Unix, чтобы сделать это, но это не очень легко запомнить в следующий раз :)
Если у вас есть простой пример точной командной строки, которая делает это, я бы этого хотел.
linux
networking
Dustin Boswell
источник
источник
Ответы:
Обновить:
Как отметил Михал в комментариях: Начиная с версии 1.3 tcpflow опция -e используется для указания имени сканера. Поэтому выводится ошибка «Неверное имя сканера« 8983 ». Правильная команда
sudo tcpflow -i any -C -J port 1234
(также
-J
был изменен-g
в последней версии)Спасибо Ив за то, что указал мне на " tcpflow ". Вот командная строка:
Это все, что я хочу
"
-C
" Говорит ему, чтобы вывести на консоль вместо файла. "-e
" Включает цвета, чтобы клиент-> сервер и сервер-> клиент были визуально различимы.Я установил tcpflow, просто выполнив
источник
-e
опция используется для указания имени сканера. Поэтому выводится ошибка «Неверное имя сканера« 8983 ». Правильная командаsudo tcpflow -i any -C -J port 1234
-J
это было изменено-g
в последних выпусках.Socat - это инструмент, который вы запрашиваете. Он может выступать в качестве прокси:
тогда ваше приложение должно подключить порт 4444 вместо прямого подключения к 1234
Опция -v для socat распечатывает все, что получает по стандартной ошибке (stderr).
Обновить:
Если socat недоступен на вашем компьютере, вы все равно можете эмулировать его с помощью netcat:
предостережения: эта опция является однонаправленной. второй экземпляр netcat напечатает любой ответ с вашего сервера на стандартный вывод. Вы все еще можете сделать тогда:
источник
Попробуйте Wireshark . Это отличный анализатор протоколов, предназначенный как для Linux, так и для Windows.
источник
tcpflow - это то, что вы хотите. Выдержка из справочной страницы:
Установите соединение между приложением и сервером. Когда соединение установлено и работает, tcpflow все еще может захватывать данные из него. Например:
Все данные будут храниться в файле с именем 127.000.000.001.48842-127.000.000.001.05555.
Вы можете все еще перенаправить это на стандартный вывод с опцией -Cs. Прочитайте страницу руководства, чтобы поиграть с выражением, чтобы настроить пакеты, которые вы хотите захватить tcpflow.
источник
ngrep
очень хорошо для этого. Для поиска в пакетах требуется строка BPF и необязательная строка, а затем выводит содержимое пакета на экран в довольно полезном формате. При желании он также создает дамп в файл pcap_dump, который вы можете более подробно изучить в Wireshark позже.источник
Посмотрите на Chaosreader . Хотя он делает немного больше, чем вы просите, и немного по-другому, возможно, вы могли бы изменить его код, чтобы сделать то, что вы хотите.
источник
Может быть, вы можете написать оболочку для tcpdump, например, которая удалит всю избыточную информацию
источник