Эффективное программирование TCP-IP




Выходная информация, формируемая tcpdump - часть 5


tcpdump -х -s 100 -l

После удаления строк, относящихся к DNS, и исключения имени домена из адреса хоста bsd получается следующий результат:

1 12:57:53.299924 bsd.1053 > netcom4.netcom.com.daytime: udp 1

4500 001d 03d4 0000 4011 17al c7b7 c684

c7b7 0968 041d 000d 0009 9c56 00

2 12:57:53.558921 netcom4.netcom.com.daytime > bsd.1053: udp 26

4500 0036 f0c8 0000 3611 3493 c7b7 0968

c7b7 c684 000d 041d 0022 765a 5375 6e20

5365 7020 3139 2030 393a 3537 3a34 3220

3139 3939 0a0d

Последний байт в первом пакете - это нулевой байт, который udphelloc посылает хосту netcom4. Последние 26 байт второго пакета - это полученный ответ. Интерпретировать приведенные в нем шестнадцатеричные цифры довольно трудно.

Авторы tcpdump не хотели давать ASCII-представление данных, так как полагали, что это упростит кражу паролей для технически неподготовленных лиц. Теперь многие считают, что широкое распространение программ для кражи паролей сделало это опасение неактуальным. Поэтому есть основания полагать, что в последующие версии tcpdump будет включена поддержка вывода в коде ASCII*.(* Начиная с версии 3.5 tcpdump позволяет выводить и ASCII-представление. Для этого надо одновременно указать опции -X и -х. - Прим. автора.)

А пока многие сетевые программисты упражняются в написании фильтр, преобразующих выдачу tcpdump в код ASCII. Несколько подобных программ есть в Internet. Показанный в листинге 4.1 сценарий Perl запускает tcpdump, перенаправляет ее вывод к себе и перекодирует данные в ASCII.

Листинг 4.1. Perl-сценарий для фильтрации выдачи tcpdump

1    #! /usr/bin/perl5

2    $tcpdump = "/usr/sbin/tcpdump";

3    open( TCPD, "$tcpdump 8ARGV |" )

4    die "не могу запустить tcpdump: \$!\\n";

5    $| = 1;

6    while ( <TCPD> )

7    {

8    if ( /^\t/ }

9    {

10     chop;

11     $str =  $_;

12     $str =~ tr / \t//d;

13     $str = pack "H*"  , $str;

14     $str =~ tr/\x0-\xlf\x7f-\xff/./;

15     printf "\t%-40s\t%s\n", substr(   $_, 4 ), $str;

16   }

17   else

18   {

19     print;

20   }

21   }

Если еще раз прогнать последний пример, но вместо tcpdump использоват tcpd, то получится следующее:

1 12:58:56.428052 bsd.1056 > netcom4.netcom.com.daytime: udp 1

4500 OOld 03d7 0000 4011 179e c7b7 c684 E.......@....

c7b7 0968 041d OOOd 0009 9c56 00 ..-h......S.

2 12:58:56.717128 netcom4.netcom.com.daytime > bsd.1053: udp 26

4500 0036 lOfl 0000 3611 146b c7b7 0968  E..6....6..k..h

c7b7 c684 OOOd 0420 0022 7656 5375 6e20  ......."rVSun

5365 7020 3139 2030 393a 3538 3a34 3620  Sep 19 09:58:46

3139 3939 OaOd                         1999..




Содержание  Назад  Вперед