Я пытаюсь записать входящий поток UDP (поток в том смысле, что это поток последовательных дейтаграмм).
Я попытался netcat
но, к сожалению несколько источников отправлять данные на один и тот же адрес порта и nc
не позволяет указать исходный или целевой адрес многоадресной рассылки.
Потом я попробовал tcpdump -w -
потому что tcpdump имеет богатые возможности фильтрации, но записывает необработанный поток, и мне нужны только фактические данные, чтобы я мог обрабатывать их, как поток. К сожалению, он записывает всю информацию, связанную с пакетами, такую как заголовки источника / назначения или IP / UDP.
Есть ли способ сделать это? Для этого я мог бы написать небольшую программу на C, но я предпочитаю использовать существующие инструменты.
Мой первый выбор - wirehark. Если вам нужно сделать это с терминала, вы также можете попробовать ngrep, он дает более читаемый результат, чем tcpdump. Вероятно, вы можете отфильтровать информацию заголовка с помощью простого сценария bash.
Ты можешь использовать wireshark
. Он может делать то, что вы хотите, и даже больше.
wireshark
бесполезен, если вы хотите получить данные в потоке и передать их программе. В этом случае я должен сказать, что вы используете неправильный протокол. Если бы я был на твоем месте, я бы обман.
Надеюсь, вы работаете в Linux. В этом случае создайте правило перезаписи брандмауэра для отправки входящих пакетов UDP из желаемого источника, которые отправляются на соответствующий порт, на другой порт, где вы можете использовать netcat для записи данных в поток.
это вопрос поможет вам начать.
netsed или iptables + модуль libnetfilter_queue или ngrep может делать то, что вы хотите.