Tcpdump
Expression是一个布尔表达式,即过滤器,表达式为真时才捕捉处理该数据包
通常,如果表达式包含Shell元字符,例如用于转义的反斜杠,则将expression用单引号括起来比转义Shell元字符更容易。
参数用空格连接,如host 1.2.3.4。
host: 过滤某个主机的数据报文
$ tcpdump host 1.2.3.4
src, dst: 过滤源地址和目的地址
$ tcpdump src 2.3.4.5$ tcpdump dst 3.4.5.6
net: 过滤某个网段的数据,CIDR 模式
$ tcpdump net 1.2.3.0/24
proto: 过滤某个协议的数据,支持 tcp, udp 和 icmp。使用的时候可以省略 proto 关键字。
$ tcpdump icmp
port: 过滤通过某个端口的数据包
$ tcpdump port 3389
过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/&& 、 或/OR/|| 和 非/not/!。
源地址是 10.5.2.3,目的端口是 3389 的数据包
$ tcpdump -nnvS src 10.5.2.3 and dst port 3389
从 192.168 网段到 10 或者 172.16 网段的数据包
$ tcpdump -nvX src net 192.168.0.0/16 and dat net 10.0.0.0/8 or 172.16.0.0/16
此外还有指定端口和数据报文大小范围的过滤器:
port 范围
$ tcpdump portrange 21-23
数据包大小,单位是字节
$ tcpdump less 32$ tcpdump greater 128$ tcpdump > 32$ tcpdump <= 128
对于比较复杂的过滤器表达式,为了逻辑的清晰,可以使用括号。不过默认情况下,tcpdump 把 () 当做特殊的字符,所以必须使用单引号 ’ 来消除歧义:
$ tcpdump -nvv -c 20 ‘src 10.0.2.4 and (dat port 3389 or 22)’
过于过滤器的更多详细信息,请访问 tcpdump 官方 map page 的 PCAP-FILTER 部分。
w参数,把数据包保持到文件中
NOTE:保存到文件的数据不是屏幕上看到的文件信息,而是包含了额外信息的固定格式 pcap,需要特殊的软件来查看,使用 vim 或者 cat 命令会出现乱码。
r参数,从文件中读取数据包
V参数,从一些文件中读取数据包
需要注意的是,tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
-S 显示绝对的序列号(sequence number),而不是相对编号。
默认一直抓包,使用c参数则只捕获n个包
捕捉结束之后,报告捕获的包数目、通过过滤器的包数目、被内核丢弃的包(因为buffer空间不够大导致的丢包)
使用B参数可以配置buffer大小
n参数不要解析域名和端口,直接显示 ip。
i参数,指定监听的端口,-i any用来监听所有端口
只使用 ascii 打印报文的全部数据,不要和 -X 一起使用。截取 http 请求的时候可以用 sudo tcpdump -nSA port 80!
-v, -vv, -vvv:显示更多的详细信息。
x参数,出来打印数据包的header信息,还把报文内容使用hex格式来输出
xx参数,同 -x,但同时显示以太网头部。
X参数,同时用 hex 和 ascii 显示报文的内容。
同 -X,但同时显示以太网头部。