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