tcpdump是一个网络抓包工具,依赖于libpcap实现。libpcap是一个网络抓包库,支持ether,fddi,tr,wlan,ip,ip6,arp,rarp,decnet,tcp和udp协议。
tcpdump的基本是用方法为:
[source,shell]
----
tcpdump options expression
----
options指定程序运行选项,expression是一个逻辑表达式,只抓取满足expressionn表达式的包。例如`tcpdump -i eth0 tcp and host 192.168.1.101`抓取eth0接口到192.168.1.101主机的所有tcp包。`-i eth0`是运行选项,`tcp and host 192.168.1.101`是表达式,>表示抓取所有到192.168.1.101主机的tcp包。tcpdump支持的详细参数可参考`man tcpdump`,表达式的详细信息可参考`man pcap-filter`。
== 常用的选项
-A:: 采用ASCII码打印出包内容,抓取网页时很方便。
-F file:: 使用file文件中的内容作为表达式,命令行中的表达式将被忽略。
-i interface:: 要抓取的网络接口,如果未指定,则使用序号最小的接口,如eth0。也可以使用any来使用任意接口。
-l:: 设置stdout的输出模式为行缓冲,当想一边抓包一遍查看数据的时候有用。如`tcpdump -l | tee dat`和`tcpdump -l > dat & tail -f dat`。
-e:: 打印数据链路层包头。
-Q direction:: 设置要抓取发送还是接收的数据,可能的值为in,out和inout。
-r file:: 从文件中读取数据包(有tcpdump -w生成,或其他pcap兼容格式)。
-v::
-vv::
-vvv::
打印详细信息。
-w file:: 将原始包信息输出到文件中,之后可以通过-r来打印。
-x:: 除了打印包头,同样以十六进制方式打印包内容,不包括链路层的包头。
-xx:: 除了打印包头,同样以十六进制方式打印包内容。
-X:: 除了打印包头,同样以十六进制和ASCII码方式打印包内容,不包括链路层的包头。
-XX:: 除了打印包头,同样以十六进制和ASCII码方式打印包内容。
== 表达式语法
表达式有一个或多个原语组成,通常原语由标识符(名称或数字)和限定符构成,有三种不同种类的限定符:
类型::
表示名称(或数字)指的是什么类型的东西。可能的值有*host*,*net*,*port*和*portrange*,比如`host foo`,表示foo主机,host限定符,foo是标识符;再如`port 20`,port是限定符,表示20指的是端口号。
方向::
为标识符指定传输方向。可能的值有*src*,*dst*,*src or dst*,*src and dst*,*ra*,*ta*,*addr1*,*addr2*,*addr3*和*addr4*。例如`src foo`, `dst net 128.3`, `src or dst port ftp-data`。如果未指定方向,则假定使用了`src or dst`。*ra*,*ta*,*addr1*,*addr2*,*addr3*和*addr4*限定符只对IEEE 802.11无线网局域网链路层有效。
协议::
限定只匹配特定的协议。可能的值为*ether*,*fddi*,*tr*,*wlan*,*ip*,*ip6*,*arp*,*rarp*,*decnet*,*tcp*和*udp*。如`ether src foo```arp net 128.3`,`tcp port 21`。如果未指定,则假定匹配所有与该类型相关的协议。
原语可以用括号和预算符组合使用使用:用括号进行分组,运算符包含否定(!或not),连接(&&或and),可选(||或or)。否定运算符具有最高优先级,连接和可选运算符具有相同优先级。
expression所有可用的所有原语请参考`man pcap-filter`。
== 使用示例
=== 抓取tcp reset包
[source,shell]
----
tcpdump -i wlan0 tcp[13] == 4
----
=== 抓取http包
[source,shell]
----
tcpdump -i wlan0 -X tcp port 80
----
tcpdump使用方法介绍
发布于