| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > снифер на perl, помогите разобраться |
| Автор: rainz 4.10.2010, 13:46 | ||
Начал учить perl, под руку попал исходник сниффера.. надо запускать из под рута, ./sniffer.pl > dump.. но он нихрена не хочет писать в файл дамп. читал маны что бы понять код. запускал tcpdump с теми же параметрами, в консоль выводит. еще мне интересно зачем писать $LIMIT = shift || 5000; если shift возвращает первый элемент массива, а в строчке просто выставляется максимум записей в файл? как эта строка работает на самом деле? |
| Автор: Egik2 4.10.2010, 14:45 | ||||
Здесь shift возвращает первый параметр переданный скрипту, если его нет то 5000. Он будет что-то ловить если ты с машины, откуда его запускаешь устанавливаешь соединение на 80 порт удаленной машины. Если ты не соединяешься не с кем, то ничего и не будет.
Анализирует пакет - если в нем содержатся слова GET, POST, WWW-Authenticate или Authorization - то этот это печатается в выходной файл. и т.д. Вот обобщенно смысл скрипта. |
| Автор: rainz 4.10.2010, 15:40 |
| Я думал он слушает 80 порт моей машины, запускал скрипт и начинал лазить браузером по инету.. ведь если запустить просто tcpdump в консоли с теми же параметрами, и лазить по сайтам, то в консоли отображается результаты tcpdump.. |
| Автор: Egik2 4.10.2010, 16:00 | ||
| tcpdump не слушает порт, а сниферит трафик который идет на 80 порт удаленной машины. То есть по идее если ты лазишь в интернет, то что-то тебе в файл должно писаться. Попробуй замени код на следующий:
Просто убрали цикл while. Посмотри будет ли что-нить выводить. |
| Автор: rainz 4.10.2010, 16:21 |
| perl sniffer.pl > dump в файле теперь лежит вот такая муть: -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 А что если в опере пустить трафик через прокси с 80 портом, по сути тогда должно заработать.. |
| Автор: arto 4.10.2010, 20:14 |
| # tcpdump -c5 -lnx -s 1024 dst port 80 or src port 80 | perl -lne 'chomp; if (m#^\S#) { $body =~ s#(\w\w)\s*#chr(hex $1)#ge; print "$from -> $to: $body" if ($body =~ m#\w{5,}#); ( $from,$to,$body ) = ( split ":?\\s+" )[2,4] } else { $body .= ( split ":\\s+" )[1]; }' M tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 1024 bytes 5 packets captured 47 packets received by filter 0 packets dropped by kernel 192.168.1.25.11038 -> 192.168.1.9.http: E^@^@[93]^MЛ@^@[80]^Fi^Fю╗^A^Yю╗^A +^^^@P0:[9A]ЙTеk[P^XDp^G6^@^@GET /cgi/printenv.pl HTTP/1.0 User-Agent: Wget/1.11.4 Accept: */* Host: arto Connection: Keep-Alive ... |