内容: WinDump手册 名称 windump – 获取网络流量 命令格式 windump [ -aBdDeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ] 描述 Tcpdump 输出网卡数据包中匹配布尔表达式的数据包头。 SunOS 系统下使用nit或bpf:要运行tcpdump,你必须有对dev/nit或/dev/bpf*的权利。Solaris系统下使用dlpi:你必须有对网络假设置的权利。HP-UX系统下使用dlpi:你应该以超级用户ROOT或安装SETUID到ROOT下。IRIX下使用SNOOP:你应该以超级用户ROOT或安装SETUID到ROOT下。LINUX下:你应该以超级用户ROOT或安装SETUID到ROOT下。在系统Ultrix和 Digital UNIX: 命令参数 -a 将网络和广播地址转化为名称 -c 接收指定数据包后退出 -d 接收人可读的包匹配编译代码到标准输出,然后停止 -dd 以C程序分段方式捕获包匹配代码 -ddd 以十进制数据形式捕获包匹配代码 -e 在每个捕获行打印链路层 -E algo:secret为解密IPSE ESP包使用算法。算法可以是des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或none。默认值是desc-cbc。只有当TCPDUMP编译时使用激活加密选项时,才可以解密数据包。Secret是ESP密匙是ASCII码。当前还不能认为一定是二进制值。该选项是以RFC2406ESP为假设,而不是RFC1827 ESP。只用于调试,不鼓励用真正的密码作为选项。当你在PS或其他场合,把IPSEC密码写在命令行上时,会被他人看到。 -f 不用符号而用数字方式输出外部英特网地址 -F 使用文件作为过滤表达式的输入。命令行的其他部分会被忽略。 -i 在接口上监听。如果没有指定,TCPDUMP将搜索系统接口列表中最小,被配置激活的接口(LOOPBACK接口除外)。可用最先匹配替换这种关系。在WINDOWS中接口可以是网卡的名称,或是网卡的号码(-D参数可显示该号码)。 内核为2。2或其后的LINUX系统,参数“ANY”可以获取所有接口的数据。应注意的是在混乱模式下不能使用“ANY”参数。 -l 标准输出行缓存。如果你想在捕获数据时查看的话,这个参数很有用。例如:“tcpdump -l │ tee dat'' or ``tcpdump -l > dat & tail -f dat''.” n 不要将地址(如主机地址,端口号)转换为名称 -N 不要打印主机名称的域名限定。如:如果你使用该参数,TCPDUMP会输出“NIC”而不是“NIC。DDN。MIL”。 -m 从文件模块中载入SMI MIB 模块定义。这个选项可以为TCPDUMP载入多个MIB模块 -O 不要运行包匹配代码优化器。只有在你怀疑优化器有问题时可以使用这个参数。 -p 不要让接口处于“混乱”模式。注意接口可能由于其他原因处于“混乱”模式;因此“-p”不能用作以太网络主机或广播的缩写。 -q 快速(安静?)输出。打印较少的协议信息,因此输出行更短。 -r 从文件中读取包(与参数据-W一起使用)。如果文件是“-”就使用标准输入。 -s 不使用默认的68个字节,更改从每个包中获取数据的字节数量( SunOS系统实际最小为96)。对于IP,ICMP,TCP和UDP包68个字节已足够,但是对命名服务和NFS包,他们的协议会被截断(见下面)。包被截断是因为在使用参数``[│proto]''输出时指定受限制的快照,proto是被截断协议层的名称。注意如果使用大的快照会增加处理包的时间,并且明显地减少包的缓存数量。也许会导致包的丢失。你应该将snaplen 设置成你感兴趣协议的最小数。当snaplen 为0时接收整个包。 -T 根据表达式将选中的数据包表达成指定的类型。当前已有的类型有CNFP(Cisco的网络流量协议),rpc(远端程序调用),rtp(实时程序协议),rtcp(实时程序控制协议),snmp(简单网络管理协议),vat(可视单频工具),和wb(分布式白板)。 -R 假设ESP/AH包遵守旧的说明(RFC1825到RFC1829)。如果该参数被指定,TCPDUMP不打输出域。因为在ESP/AH说明中没有协议版本,TCPDUMP就无法推断出其版本号。 -S 输出绝对TCP序列号,而不是相对号。 -t 每个捕获行不要显示时间戳。 -tt 每个捕获行显示非格式化的时间时间戳。 -v 详细输出。例如,显示生存时间TTL,标识符,总长度和IP数据包的选项。也进行额外的包完整性较验,如验证IP和ICMP的头标较验值。 -vv 更为详细的输出。例如,显示NFS中继包中的其他域。 -vvv 很详细的输出。如,完全输出TELNET SB… SE选项。带-X参数的TELNET,打印并以十六进制输出。 -w 不对原始数据包解析打印而是转到文件中去。以后可用-r选项打印。当文件名为“-”表示标准输出。 -x 以十六进制(去除链路层头标)输出每个数据包。输出整个包的小部分或snaplen 个字节。 -X 输出十六进制同时,输出ASCII码。如果-x也被设置,数据包会以十六制/ASCII码显示。这对于分析新协议非常方便。如果-x也没有设置,一些数据包的部分会以十六制/ASCII码显示。 Win32特殊扩展 -B 以千字节为单位设置驱动缓存。默认缓存为1M(即1000)。如果在获取数据包时有数据丢失,建议使用该参数增大核心缓存大小,因为驱动缓存大小对数据捕获性能有很大影响。 -D 显示系统上可用的网卡列表。该参数将返回每块网卡的号码,名称和描述。用户可以输入“WinDump –i 网卡名称”或“WinDump –i 网卡号码”。如果机器有多块网卡,不带参数的WINDUMP命令会从系统的第一块可用网卡开始。 表达式 选择哪些包被捕获。如果没有指定表达式,会捕获所有在网络中的数据包。否则只获捕表达式为真的数据包。 表达式由一个或多个原语组成。原语通常由一个ID(名称或号码)前面加一个或多个限定词组成。有三种不同的限定词。 类型 限定词指出id,名称或号码属于哪种类型。可能的类型包括:host,net和port。如’host foo’, `net 128.3', `port 20'. 如果没有指定类型,假设为host。 方向 限定词指出特定的传输方向,是从id传来还是传到id。可能方向是src, dst, src or dst 和 src and dst。例如`src foo', `dst net 128.3', `src or dst port ftp-data'。如果没有方向限定词将指定src or dst。对于‘空’链路层(像SLIP这样的点到点协议),可以用inbound和outbound 限定词指明需要的方向。 协议 限定词限定匹配某类特定的协议。可能的协议有:ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp和udp。如`ether src foo', `arp net 128.3', `tcp port 21'。如没指定协议,则假设匹配所有协议。如`src foo' 指 `(ip or arp or rarp) src foo' (但后面的表达式不合法法)(except the latter is not legal syntax), `net bar' 指 `(ip or arp or rarp) net bar' 和 `port 53' 指 `(tcp or udp) port 53'。 `fddi' 实际上是’ether’的别名;解析器会认为两者都是指“指定接口中使用的数据链路层”FDDI头标包括类似以太网的源和目的地址,经常包含类似以太网的包类型,所以你可像对以太网字段一样过滤FDDI域。FDDI头标也包括其他域,但你不能在表达式中直接使用他们。 同样’tr’也是’ether’的别名;前一段FDDI头标的情况也适用于令牌环网头标。 除了以上所讲的,还有一些特殊的原语关键字不使用这种方式:gateway, broadcast, less, greater 和算术表达式,都描述如下: 通过使用and, or和 not 结合原语,构成更复杂的过滤表达式。如`host foo and not port ftp and not port ftp-data'。为了减少输入,可以忽略相同的限定词列表。如`tcp dst port ftp or ftp-data or domain' 实际等同于 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'. (1). tcpdump的选项介绍 http://anheng.com.cn/news/24/586.html    -a    将网络地址和广播地址转变成名字;    -d    将匹配信息包的代码以人们能够理解的汇编格式给出;    -dd    将匹配信息包的代码以c语言程序段的格式给出;    -ddd   将匹配信息包的代码以十进制的形式给出;    -e    在输出行打印出数据链路层的头部信息;    -f    将外部的Internet地址以数字的形式打印出来;    -l    使标准输出变为缓冲行形式;    -n    不把网络地址转换成名字;    -t    在输出的每一行不打印时间戳;    -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;    -vv    输出详细的报文信息;    -c    在收到指定的包的数目后,tcpdump就会停止;    -F    从指定的文件中读取表达式,忽略其它的表达式;    -i    指定监听的网络接口;    -r    从指定的文件中读取包(这些包一般通过-w选项产生);    -w    直接将包写入文件中,并不分析和打印出来;    -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;) (2). tcpdump的表达式介绍 http://anheng.com.cn/news/24/586.html 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。 http://anheng.com.cn/news/24/586.html 第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host. http://anheng.com.cn/news/24/586.html 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。 http://anheng.com.cn/news/24/586.html 第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。 http://anheng.com.cn/news/24/586.html A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要 #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1 (3). tcpdump的输出结果介绍 http://anheng.com.cn/news/24/586.html 下面我们介绍几种典型的tcpdump命令的输出信息 http://anheng.com.cn/news/24/586.html A,数据链路层头信息 http://anheng.com.cn/news/24/586.html 使用命令 #tcpdump --e host ice ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne t 0:0(0) ack 22535 win 8760 (DF) 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760. B,ARP包的TCPDUMP输出信息 http://anheng.com.cn/news/24/586.html 使用命令 #tcpdump arp 得到的输出结果是: 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。 C,TCP包的输出信息 http://anheng.com.cn/news/24/586.html 用TCPDUMP捕获的TCP包的一般输出信息是: src > dst: flags data-seqno ack window urgent options src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项. D,UDP包的输出信息 http://anheng.com.cn/news/24/586.html 用TCPDUMP捕获的UDP包的一般输出信息是: route.port1 > ice.port2: udp lenth UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth