tcpdump过滤表达式

tcpdump过滤表达式

tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。

如果没有给出任何条件,则网络上所有的信息包将会被截获。

以下演示用windump演示。windump需要下载安装。

tcpdump和windump在过滤表达式的语法上有可能不同,没有进行实际的验证。


tcpdump过滤表达式的语法

Protocol(协议)

可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp

如果没有特别指明是什么协议,则默认使用所有支持的协议


Direction(方向)

可能的值: src, dst, src and dst, src or dst

如果没有特别指明来源或目的地,则默认使用 “src or dst” 作为关键字

例如,”host 10.2.2.2″与”src or dst host 10.2.2.2″是一样的


Host(s)

可能的值: net, port, host, portrange

如果没有指定此值,则默认使用”host”关键字

例如,”src 10.1.1.1″与”src host 10.1.1.1″相同


Logical Operations(逻辑运算)

可能的值:not, and, or

否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。

例如,

“not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″相同。

“not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”不同。


host, net, port表明数据包(packet)的类型

一种是关于类型的关键字,主要包括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。

捕捉210.27.48.1的主机收到的和发出的所有的数据包

D:\soft\windump>windump host 10.255.9.79

输出

windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:04:00.272373 IP Lenovo-PC > 218.205.187.57: ICMP echo request, id 1, seq 19362, length 40
15:04:00.279128 IP 218.205.187.57 > Lenovo-PC: ICMP echo reply, id 1, seq 19362, length 40
15:04:00.528084 IP Lenovo-PC.137 > 218.205.187.57.137: UDP, length 50
15:04:00.534355 IP 218.205.187.57 > Lenovo-PC: ICMP 218.205.187.57 udp port 137 unreachable, length
36
.........

捕捉8080端口的数据包

D:\soft\windump>windump port 8080
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:14:17.507424 IP Lenovo-PC.58970 > 112.90.17.179.8080: S 4218824838:4218824838(0) win 8192 <mss 14
60,nop,nop,sackOK>
15:14:17.565358 IP 112.90.17.179.8080 > Lenovo-PC.58970: S 3061885582:3061885582(0) ack 4218824839 w
in 5840 <mss 1380,nop,nop,sackOK>
15:14:17.565415 IP Lenovo-PC.58970 > 112.90.17.179.8080: . ack 1 win 16560


src, dst表明数据包的传输方向

第二种是确定传输方向的关键字,主要包括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关键字。

D:\soft\windump>windump src host 10.255.9.79
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:06:55.351206 IP Lenovo-PC > 218.205.187.57: ICMP echo request, id 1, seq 19537, length 40
15:06:56.294031 IP Lenovo-PC.137 > 218.205.187.57.137: UDP, length 50
15:06:56.352565 IP Lenovo-PC > 218.205.187.57: ICMP echo request, id 1, seq 19538, length 40
15:06:56.616626 IP Lenovo-PC.58531 > ..80: P 3497409587:3497410288(701) ack 4204552782 win 15528
15:06:56.616748 IP Lenovo-PC.58531 > ..80: . 701:2081(1380) ack 1 win 15528
.............

这样也可以

D:\soft\windump>windump src 10.255.9.79
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:25:19.191729 IP Lenovo-PC > 218.205.187.57: ICMP echo request, id 1, seq 20626, length 40
15:25:19.579012 IP Lenovo-PC.137 > 218.205.187.57.137: UDP, length 50


fddi, ip ,arp, rarp, tcp, udp表明协议类型

第三种是协议的关键字,主要包括fddi, ip ,arp, rarp, tcp, udp等类型。fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。

如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

D:\soft\windump>windump ip
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:21:00.740903 IP Lenovo-PC.59024 > ..80: P 3750843348:3750844049(701) ack 3395671920 win 16388
15:21:00.741032 IP Lenovo-PC.59024 > ..80: . 701:2081(1380) ack 1 win 16388
15:21:00.741036 IP Lenovo-PC.59024 > ..80: . 2081:3461(1380) ack 1 win 16388
..................

这样

D:\soft\windump>windump tcp
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
15:31:49.098485 IP Lenovo-PC.59363 > ..80: . ack 490083869 win 16044
15:31:53.716766 IP Lenovo-PC.59363 > ..80: P 0:701(701) ack 1 win 16044


windump使用举例

捕捉指定主机和端口的数据包

D:\soft\windump>windump host 10.255.9.79 and port 80
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
17:32:49.706890 IP Lenovo-PC.52173 > ..80: P 2673414750:2673415452(702) ack 2188041574 win 15528
17:32:49.707020 IP Lenovo-PC.52173 > ..80: . 702:2082(1380) ack 1 win 15528

示例

D:\soft\windump>windump host 10.255.9.79 and tcp port 80
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
17:34:26.815437 IP Lenovo-PC.52233 > 111.13.100.116.80: R 50176284:50176284(0) ack 2325323249 win 0


ping baidu.com时抓包

抓取从百度主机返回的icmp协议的数据包

D:\soft\windump>windump src host baidu.com and icmp
windump: listening on \Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E}
17:46:48.816422 IP 220.181.111.85 > Lenovo-PC: ICMP echo reply, id 1, seq 28731, length 40
17:46:49.812120 IP 220.181.111.85 > Lenovo-PC: ICMP echo reply, id 1, seq 28733, length 40
17:46:50.805159 IP 220.181.111.85 > Lenovo-PC: ICMP echo reply, id 1, seq 28735, length 40
17:46:51.807633 IP 220.181.111.85 > Lenovo-PC: ICMP echo reply, id 1, seq 28737, length 40


windump列出可抓包的接口

这个命令在本机有多个网卡时非常有用。比如,我的机器装有3块网卡,而我只抓第二块网卡上的包,那么我用windump –D列出机器上所有的网卡,再指定只抓第二块网卡的包,方法如下:

D:\soft\windump>windump -D
1.\Device\NPF_{3B97B5BC-06DF-4652-BDB9-6BE446278EFA} (Realtek PCIe GBE Family Controller)
2.\Device\NPF_{B310DB50-3CE0-4EE9-8FB2-2FAB0C95C25E} (Microsoft)
3.\Device\NPF_{A1124E74-4AD2-4958-A7DE-D82D47A870BD} (Microsoft)

更过细节见:http://fangxin.blog.51cto.com/1125131/735178

注:捕获过程是在数据链路层完成的,并且数据链路首部也包含在被捕获的数据中。

=======END=======

你可能感兴趣的:(tcpdump过滤表达式)