Как собрать TCP и декодировать информацию http в коде C? - PullRequest
3 голосов
/ 21 марта 2012

Я работаю с libpcap, чтобы проверить информацию http.libpcap не может пересобрать tcp сегмент.Есть много угловых случаев, чтобы иметь дело вручную.Я также читал исходный код Wireshark.Это слишком большое.Имеет ли какой-либо открытый исходный код, может пересобрать tcp и вывести данные http в c?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Ранее взломали код driftnet, tcpflow, pcap и т. Д.

tcpflow может повторно собирать дампы, например, из tcpdump. «Типичная» цепочка работ может быть:

$ tcpdump -nnieth0 -w dump.raw
# dump dum dump
$ mkdir tmp && cd tmp
tmp/$ tcpflow -r ../dump.raw
# This joins the transfers into separate files
# Now one can investigate each transfere from those separate files
# Next join them to one:
tmp/$ cat * > ../dump.flow
tmp/$ cd ..
# Extract some data
$ foremost -i dump.flow

Поверьте, вы можете найти несколько полезных строк в исходном коде для них.

Остальное:
Библиотека разбора HTTP: Анализатор HTTP

1 голос
/ 09 февраля 2013

Самый простой способ сделать это - загрузить программное обеспечение wireshark, открыть файл pcap или записать его в режиме реального времени. после этого щелкните правой кнопкой мыши на любом пакете и перейдите к «следить за потоком TCP» ... вы увидите ваши http-данные в открывшемся окне.

Если вы хотите построить программу с нуля. -
Структура файла pcap для транзакции tcp выглядит примерно так:
[Pcap_file_header]
за каждый пакет
[pcap_packet] - в нем содержится информация о пакете.
[ip_header] ---- обычно размером 20 и более
[tcp_header] - обычно размером 20 или более
[пакет] --- len хранится в заголовке пакета pcap

Теперь, чтобы прочитать информацию, сначала получите ваш pcap-файл в указателе потока.
Прочитать заголовок файла пакета (Google для различных типов структур)
начать цикл
за каждый пакет
читать pcap_phdr из файла или потока добавить смещение длины ip_hdr и длины tcp hdr
например указатель = указатель + 20 (для ip) +20 (для tcp)
указатель должен указывать на ваши данные так что просто прочитайте pcap_phdr.caplen количество байтов и напечатайте его символ за символом.

0 голосов
/ 21 марта 2012

Наименьший из известных мне стеков TCP / IP с открытым исходным кодом - uIP , но он немного странный, поскольку он предназначен для очень небольших систем (микроконтроллеров)

Другойнебольшой открытый стек TCP / IP с открытым исходным кодом, который немного более традиционен: lwIP

...