Perl сетевой фрейм / анализатор пакетов - PullRequest
0 голосов
/ 11 декабря 2010

Я пишу небольшой анализатор как часть личного проекта.Я использую Net::Pcap (действительно отличный инструмент).

В цикле обработки пакетов я использую превосходный Net::Frame для распаковки всех заголовков и получения данных.Меня беспокоит, что это может быть не очень эффективно (Net::Frame отлично, но, похоже, больше, чем нужно для этого проекта).

Также мне не нравится, что для некоторых систем Debian мне приходилось вручную компилировать libdumbnet(пакет, предоставленный в официальных репозиториях apt, похоже, не работал, Net-Libdnet-0.92 не понравился).

Все, что я хочу, - это получить полезную нагрузку внутри сегмента TCP.Есть ли альтернатива?Спасибо.

PS Было бы действительно очень плохо (читай "thedailywtf.com достойный"), если бы я просто взял пакет и искал его по некоторому шаблону?

1 Ответ

1 голос
/ 13 декабря 2010

Недавно я написал распаковщик файла дампа PCAP на C, а затем пожелал, чтобы я просто использовал вместо этого библиотеки с открытым исходным кодом (когда я понял, что они существуют и их так легко использовать). Я должен сказать, что, поскольку это двоичный формат файла, его, вероятно, легче сделать в C, чем в Perl, но я, без сомнения, разозлятся всеми фанатами Perl.

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

Что касается поиска шаблона, он почти наверняка не будет работать. Это двоичный формат файла, и пакеты могут быть фрагментированы и / или дублированы, поэтому единственный надежный способ узнать, где начинается и заканчивается сообщение, - распаковать заголовки, проверить флаги пакетов, прочитать поле длины содержимого и т. Д. И т. Д. И т. Д. Поиск по шаблону может работать 90% времени, но в какой-то момент вы обнаружите журнал захвата пакетов, который означает, что вам нужно изменить свой код. А потом через некоторое время найдите другой пакет, который означает другое изменение, и так далее, и так далее.

...