9.1.6 Tcpdump与WinDump

Tcpdump软件最初是由美国加利福尼亚大学伯克利分校洛仑兹实验室的Vin Jacobson、Craig Leres和Steve McCanne共同开发完成的,这个软件可以收集网上的IP报文,并可用来分析网络可能存在的问题。现在,Tcpdump已被移植到几乎所有的UNIX系统上,如HP-UX、SCO UNIX、SunOS、Mach、Linux和FreeBSD等。更为重要的是,Tcpdump是一个开源软件,所以我们可以在Tcpdump的基础上进行改进,诸如添加辅助分析等功能,增强网络分析能力,也可对其离线网络流量文件做进一步分析。

WinDump在Windows平台实现了Tcpdump的功能,其命令的使用格式及功能与Tcpdump一致。

Tcpdump的使用语法格式如下:


tcpdump[-AdDefLnNOpqRStuUvxX][-c count]

[-C fle_size][-F fle]

[-i interface][-m module][-M secret]

[-r fle][-s snaplen][-T type][-w fle]

[-W flecount][-E spi@ipaddr algo:secret,…]

[-y datalinktype][-Z user]

[expression]


此处,我们只关心如何使用Tcpdump来编译过滤器的指令。下面列出了我们所关注的参数及其具体含义,并针对过滤条件ip给出对应的过滤器指令输出。

-d参数:把高层容易理解的过滤字符串编译为代码,以标准格式输出。

执行tcpdump-d ip命令,将获得如下输出:


(000)ldh[12]

(001)jeq#0x800 jt 2 jf 3

(002)ret#96

(003)ret#0


-dd参数:把高层容易理解的过滤字符串编译为代码,以C程序格式输出。

如执行tcpdump-dd ip命令,将获得下面的输出:


{0x28,0,0,0x0000000c},

{0x15,0,1,0x00000800},

{0x6,0,0,0x00000060},

{0x6,0,0,0x00000000},


-ddd参数:把高层容易理解的过滤字符串编译成代码,以十进制数值格式输出。

如执行tcpdump-ddd ip命令,将获得下面的输出(第一行为输出的指令个数):


4

40 0 0 12

21 0 1 2048

6 0 0 96

6 0 0 0


-O参数:不对编译的代码进行优化。

如执行tcpdump-Od ip命令,将获得下面的输出(该过滤条件过于简单,看不出优化与不优化的区别,想要进一步了解可参见后续章节):


(000)ldh[12]

(001)jeq#0x800 jt 2 jf 3

(002)ret#96

(003)ret#0