2014-02-21 3 views
1

У меня есть файл PCAPNG, и мне нужно получить от него RTP-пакеты. В частности, один из моих RTP пакетов выглядит как ...Как извлечь RTP-пакеты определенных полей из Wireshark Capture?

кадров N: X байт на проводе ...

  • Ethernet II, Src: ...
  • IPv4, Src: ...
  • TCP, Src Port: RSTP ...
  • RTSP чередованием кадров, канал: 0x02, 163 байт
  • в реальном времени транспортный протокол

... и что мне нужно от каждого пакета является ...

  1. канала от RTSP чередования кадра
  2. Длины от RTSP чередования кадра
  3. Полезной нагрузки от RTP

... используя эти данные, я заново создаю аудио- и видеофайлы, чтобы переконструировать полное видео из локальной полезной нагрузки (воспроизведение не выполняется).

Я могу успешно получить пакеты RTP, используя либо ...

tshark -r my.pcap -R -T поля -e -w rtp.payload rtp.out

или .. .

tshark -r my.pcap -R -T поля -e rtp.payload> rtp.out

... но проблема, которую я имею, что первый метод будет сохранять все, что нужно, но по какой-то причине он добавит дополнительные данные (то есть больше, чем только полезную нагрузку RTP и содержимое чередующегося кадра RTSP) в строке nge places ..., что мешает мне написать программу для получения данных, которые мне нужно проверить. Я попытался удалить все дополнительные данные с помощью нескольких регулярных выражений, но существует слишком много разных сценариев, которые перекрываются с другими допустимыми сценариями.

Второй способ обеспечит только полезную нагрузку RTP без требуемых чередующихся свойств (он будет генерировать шестнадцатеричный код с двоеточием между каждым байтом, но это легко обрабатывается). Даже если бы я мог сделать еще один звонок, чтобы получить все свойства RLEP с чередованием кадров, мне нужно будет объединить 2 выхода, идентифицируя каждый пакет с помощью разделителя/разделителя, который я бы хотел избежать (я не мог получить tshark сделать это либо ...).

Я заглянул в фильтры чтения tshark, которые, похоже, должны быть в состоянии делать то, что мне нужно, но пока я не смог понять это. Обратите внимание, что я делаю это только для создания выборочных данных и записи логики, которая форматирует данные, необходимые для воспроизведения. В конце концов один из моих сотрудников изменит потокового клиента, чтобы захватить данные в соответствующем формате (поэтому я могу просто запускать данные через ffmpeg без его модификации). Любые идеи о том, как я могу создать формат, который мне нужен?

ответ

1

Проблема, с которой я сталкиваюсь, заключается в том, что первый метод сохранит все, что мне нужно, но по какой-то причине он добавит дополнительные данные (т.больше, чем просто полезной нагрузки RTP и RTSP содержание чередованием кадров) в странных местах

Первый метод:

tshark -r my.pcap -R -T fields -e rtp.payload -w rtp.out 

должен напечатать сообщение об ошибке, как -R флаг указывает «читать фильтр», и фильтр чтения должен появиться после флага -R и не должен начинаться с - (если то, что следует -R, начинается с -, оно интерпретируется как другой флаг), поэтому команда не указывает «фильтр чтения».

Если вы имели в виду, например,

tshark -r my.pcap -R rtp -T fields -e rtp.payload -w rtp.out 

, что команда использует -w флаг, который указывает, что двоичный файл, содержащий сырые данные пакета из my.pcap, возможно, фильтруется фильтром для чтения , должно быть записано в файл, имя которого является аргументом для флага -w, поэтому команда означает «записать в файл с именем rtp.out все пакеты RTP в my.pcap, а также написать поле каждого пакета стандартным образом положил". К сожалению, есть ошибка в TShark, которая подавляет вывод полей rtp.payload на стандартный вывод; Я только что проверил исправление ошибки.

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

Я посмотрел в tshark прочитать фильтры, которые, кажется, что он должен быть в состоянии делать то, что мне нужно

No. Read фильтрует только контроль, какие пакеты TShark, при чтении файла захвата, надоедает а не отбрасывать их после их рассечения.

Что вы хотели бы флаги

-e rtsp.channel -e rtsp.length 

, но, к сожалению, те, которые поддерживаются только текущими версиями развития 1.11.x в Wireshark, не по 1.10.x или более ранних версий , Я не знаю, какие из версий 1.11.x поддерживают их; ночные сборки будут поддерживать их.

+0

Спасибо большое! Вы правы, я имел в виду «-R rtp» (на самом деле ... так как я не делал двойной проход (-2 флаг), я на самом деле имел в виду «-Y rtp»). Я обновил свой WireShark до последней версии разработки и выполнил команду «tshark -r rtp_rtsp_Capture.pcapng -Y rtp -T fields -e rtsp.channel -e rtsp.length -e rtp.payload> rtp.out», и он работает! – Lane

0

Вы можете попытаться сохранить полезную нагрузку RTP в rtpdump формата с Wireshark после установки Rtp инструментов диалога http://www.cs.columbia.edu/irt/software/rtptools

Это делается из «RTP потоков» (телефония> RTP-> Показать все потоки), нажав кнопку " Сохранить как "в выбранном потоке.

Для получения дополнительной информации вы можете узнать http://wiki.wireshark.org/rtpdump

Смежные вопросы