LinuxForum.Fans
Тема

Парсинг tcpdump'a

Автор: brullek 16 сообщений 4237 просмотров
#271716

Всем привет. Нужна помощь в парсинге tcpdump.
Смысл - понять как парсить,что бы уметь получать все нужные данные идущие через роутер: ICQ переписки, пароли, e.t.c.
tcpdump cлушается на компе, подключенного к порту свитча, который зеркалирует все входы/выходы провайдеров, то есть, видит весь интернет траффик абсолютно.

text

tcpdump -tttt -s 10000 ${mask_filter} -w dump.sniff

Желаемая задача: преобразовать двоичный формат данных в дампе в читабельный, как в wireshark, что бы можно было обращаться и фильтровать пакеты по заголовкам, выбирать нужные, и вынимать из этих пакетов данные.
Perl я не знаю, оговорюсь сразу. Писть буду в будующем на php для веб морды.

Принцип построения пакета в двоичном формате мне ясен приблизительно: знаю какие за какими заголовками идут, примерно понимаю.

#271750
"brullek" написал:
Всем привет. Нужна помощь в парсинге tcpdump.

гугл сломался?
вот: http://wifix.ru/docs/parse_tcpdump
и вот: http://unixforum.org/index.php?showtopic=53588&st=0&p=526943&
там ещё много интересного.

"brullek" написал:
Perl я не знаю, оговорюсь сразу. Писть буду в будующем на php для веб морды.

там из перловки вам понадобятся только PCRE. Они есть и в php, и отлично работают. Если вы их не хотите знать, то простите за грубость, но вам стОит подумать о другой ОС...

#271752

и да, если что напишете - делитесь. А то мне лень, но надо. Если что непонятно - смогу помочь ;)

#271792
"brullek" написал:
не совсем понял где здесь в пакете все данные... Не очень для меня понятно(

какие данные вам нужны?
текстовые выдрать скорее всего будет сложновато, ибо они пакуются gzip'ом обычно...

#271796
drBatty написал:
[quote="brullek"]не совсем понял где здесь в пакете все данные... Не очень для меня понятно(

какие данные вам нужны?
текстовые выдрать скорее всего будет сложновато, ибо они пакуются gzip'ом обычно...[/quote]
Да выдирать придется все данные и мутить с ними...
Придеться выдерать ICQ переписки... придеться выдерать откртый текст передаваемый по telnet в cp866 кодировке... придется выдерать зашифрованные данные от некоторых программ...
Главное иметь полные данные, что бы потом допилить что с ними делать... Но это уже другая тема.

#271798

Начинаю немного втыкать, что tcpdump -r похоже решает все что нужно, только данные представляет в 0x формате, а как данные оставить в бинарном формате, используя -r ?

#271804
"Lupo Alberto" написал:
не.

ERROR10: Input dosen't look like a tcpdump or snoop output file.
If it is tcpdump, it may be a wrong or new version.

и не удивительно - последняя версия этого перлового скрипта от 2004го года :(

#271806
"brullek" написал:
Начинаю немного втыкать, что tcpdump -r похоже решает все что нужно, только данные представляет в 0x формате

вы можете вообще без ключей запускать tcpdump, тогда получите тот-же результат, что и -w | -r.

"brullek" написал:
только данные представляет в 0x формате, а как данные оставить в бинарном формате, используя -r ?

заголовки в тексте, а данные в бинарном? дык оно так и при -w.
Смотрите:

text
Host: linuxforum.ru^M
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1^M
Accept: text/css,*/*;q=0.1^M
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3^M
Accept-Encoding: gzip, deflate^M
Connection: keep-alive^M
Referer: http://linuxforum.ru/viewtopic.php?pid=295179^M
Cookie: forum_cookie_6a26ba=ODZ...
If-Modified-Since: Mon, 07 May 2012 09:01:07 GMT^M
Cache-Control: max-age=0^M
^M
жx7PNЪ^C^@J^@^@^@J^@^@^@^@%·5c⌡^@^St^@\8^H^@E^@^@<░W@^@@^F^^Ш

выдёргиваете свои данные, и прогоняете их через gunzip.

#271820
drBatty написал:

заголовки в тексте, а данные в бинарном? дык оно так и при -w.
Смотрите:
text
Host: linuxforum.ru^M
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1^M
Accept: text/css,*/*;q=0.1^M
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3^M
Accept-Encoding: gzip, deflate^M
Connection: keep-alive^M
Referer: http://linuxforum.ru/viewtopic.php?pid=295179^M
Cookie: forum_cookie_6a26ba=ODZ...
If-Modified-Since: Mon, 07 May 2012 09:01:07 GMT^M
Cache-Control: max-age=0^M
^M
жx7PNЪ^C^@J^@^@^@J^@^@^@^@%·5c⌡^@^St^@\8^H^@E^@^@<░W@^@@^F^^Ш

выдёргиваете свои данные, и прогоняете их через gunzip.

B где здесь заголовки eth, ip, tcp пакетов в? если делать -w то заголвоки ip и tcp пакетов будут в двоичном формате. Если делать -r потом, то заголовки будут в виде текста, а даныне в виде дампа 0x:

text

2012-08-24 16:08:34.372507 IP 209.84.15.126.http > 10.10.107.114.4828: Flags [P.], seq 6161385:6161613, ack 959, win 16616, length 228
        0x0000:  4500 010c 4bcb 4000 4006 97d2 d154 0f7e
        0x0010:  0a0a 6b72 0050 12dc 925a 57e9 9a3d ecd6
        0x0020:  5018 40e8 574d 0000 d562 84a5 3b5d 288c
        0x0030:  382c 37da 0f9e 5316 e4a8 92f2 39ab 159a
        0x0040:  4f38 13fd 8a61 ee62 d7b5 a32b cc25 914b
        0x0050:  6121 b588 58df 5e1b a883 2bcf ac52 cbd7
        0x0060:  4e98 fada ef75 b486 217c 26e3 0243 1881
        0x0070:  e989 4589 fdc9 8371 b773 7953 9196 d5dd
        0x0080:  1999 67f8 137f 4941 a3f0 3d92 c662 90ea
        0x0090:  5881 3f48 528c 7ad6 13e6 0e79 317e 601d
        0x00a0:  24ea e88d 7f86 1e16 ac31 f6b8 ee48 752a
        0x00b0:  ee9d 5348 ba9c e0fe c737 9886 ad4b fb65
        0x00c0:  664f 0566 7ef4 3b8e 3497 fa8b fe06 9da3
        0x00d0:  01d2 ef61 2a14 d58c f167 5212 33dc 3e52
        0x00e0:  ed27 876e e37c 52d5 f125 35cf 0333 fb59
        0x00f0:  feee df26 2dec adee d15d bd6d 97bd 734d
        0x0100:  5376 7fea 5906 11a9 0944 d594
2012-08-24 16:08:34.372764 IP 10.10.107.114.4828 > 209.84.15.126.http: Flags [.], ack 6157293, win 65535, length 0
        0x0000:  4500 0028 3a95 4000 8006 69ec 0a0a 6b72
        0x0010:  d154 0f7e 12dc 0050 9a3d ecd6 925a 47ed
        0x0020:  5010 ffff e4fd 0000 0000 0000 0000
2012-08-24 16:08:34.373172 IP 10.10.107.114.4828 > 209.84.15.126.http: Flags [.], ack 6159339, win 65535, length 0
        0x0000:  4500 0028 3a98 4000 8006 69e9 0a0a 6b72
        0x0010:  d154 0f7e 12dc 0050 9a3d ecd6 925a 4feb
        0x0020:  5010 ffff dcff 0000 0000 0000 0000
2012-08-24 16:08:34.373184 IP 10.10.107.114.4828 > 209.84.15.126.http: Flags [.], ack 6161385, win 65535, length 0
        0x0000:  4500 0028 3a9c 4000 8006 69e5 0a0a 6b72
        0x0010:  d154 0f7e 12dc 0050 9a3d ecd6 925a 57
#271824

Тоеять я хочу что бы заголовки пакета были в виде:

text
2012-08-24 16:08:34.373184 IP 10.10.107.114.4828 > 209.84.15.126.http: Flags [.], ack 6161385, win 65535, length 1300

А следом данные из этого пакета в виде:

text
Host: linuxforum.ru^M
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1^M
Accept: text/css,*/*;q=0.1^M
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3^M
Accept-Encoding: gzip, deflate^M
Connection: keep-alive^M
Referer: http://linuxforum.ru/viewtopic.php?pid=295179^M
Cookie: forum_cookie_6a26ba=ODZ...
If-Modified-Since: Mon, 07 May 2012 09:01:07 GMT^M
Cache-Control: max-age=0^M
^M
жx7PNЪ^C^@J^@^@^@J^@^@^@^@%·5c⌡^@^St^@\8^H^@E^@^@<░W@^@@^F^^Ш

И должна сохранятьяс целостность, всех пакетов, чтобы точно занть какие данные из какого пакета беруться.

#271837

Посмотрел у себя snort + base. Очень похоже на то, что требуется. Только надо будет правила поиска сингнатур под себя написать.

#271838
"brullek" написал:
B где здесь заголовки eth, ip, tcp пакетов в?

без понятия. Очевидно где-то они есть. Лично мне это не очень интересно. Ну расковыряйте исходник tcpdump.

"brullek" написал:
10.10.107.114
"brullek" написал:
0a0a 6b72

вот сразу без всяких расчётов вижу, что
10 == 0x0a
107 == 0x6b
114 == 0x72
Вот вам и Source IP из вашего пакета. Остальное по аналогии найдёте. Удачи ;)

#271851
drBatty написал:
[quote="brullek"]B где здесь заголовки eth, ip, tcp пакетов в?

без понятия. Очевидно где-то они есть. Лично мне это не очень интересно. Ну расковыряйте исходник tcpdump.

"brullek" написал:
10.10.107.114
"brullek" написал:
0a0a 6b72

вот сразу без всяких расчётов вижу, что
10 == 0x0a
107 == 0x6b
114 == 0x72
Вот вам и Source IP из вашего пакета. Остальное по аналогии найдёте. Удачи ;)[/quote]

Дело в том, что данные заголовков плавающие в количестве байт, а то банально можно было бы делать смещение 14 байт (eth) + 20 байт(ip) +20 байт(tcp) + n байт (данные).

Вообщем пока не ясно как получить:

text

2012-08-24 16:08:34.373184 IP 10.10.107.114.4828 > 209.84.15.126.http: Flags [.], ack 6161385, win 65535, length 1300
Host: linuxforum.ru^M
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1^M
Accept: text/css,*/*;q=0.1^M
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3^M
Accept-Encoding: gzip, deflate^M
Connection: keep-alive^M
Referer: http://linuxforum.ru/viewtopic.php?pid=295179^M
Cookie: forum_cookie_6a26ba=ODZ...
If-Modified-Since: Mon, 07 May 2012 09:01:07 GMT^M
Cache-Control: max-age=0^M
^M
жx7PNЪ^C^@J^@^@^@J^@^@^@^@%·5c⌡^@^St^@\8^H^@E^@^@<░W@^@@^F^^Ш
#272891

Воспользовался командой чтения ранее сохраненного дампа:

text

tcpdump -A -tttt -r file.sniff > result.txt

Результирующий файл удовлетворяет, только данные выводяться в виде точек ".", дальнейшая обработка их через iconv ни помогает, на преобразование кодирвки файл ни как не реагирует (((.
Если через iconv пропустить file.sniff - данные выижу как нужно в виде русских букв, но местами мелькают кракозябры, относящеся к заголовкам сетевого пакета: timestamp, src_ip src_port dst_ip dst_port, flags, length e.t.c.

Войдите или зарегистрируйтесь, чтобы ответить.