tcpdump指令功能强大,参数繁多。本篇作一简单的总结归纳。
tcpdump指令形式:
tcpdump [选项] [过滤规则]
选项包括-i -x 等,主要用来满足不同的显示需要
过滤规则:用于过滤目的,截留特定的数据包,使网络分析更加精准简便。
tcpdump的过滤规则表达式还可以指定逻辑运算关键字:包括非运算not (或!),与运算(and &&) ,
或运算(or ||)
通常都是需要用这些逻辑关键字来组合不同类型的规则表达式的。
下面直接通过例子来讲解:
tcpdump -i eth1 -x -s0 host 123.23.0.46 and port 4545 and tcp | more
---选项
-i:指定网卡端口
如果要抓的包源地址和目的地址都是本机,要用-i lo
-x: 可以列出十六进制以及ASCII的封包内容。默认情况下是不会显示封包内容的。
-s0:完整显示包的内容。默认情况下tcpdump只显示96个字节的包内容。
其实-s是tcpdump的一个选项,-s snaplen 可以将显示的包长度设为snaplen
tcpdump支持的选项还有很多,此处不一一列举。
---规则表达式
host:
指定类型:说明123.23.0.46是一台主机。另外net也是用来指定类型的。
src 或dst:
指明源地址or目的地址,可以使用组合 dst or src, dst and src。
缺省是dst or src
port:
指定端口号
tcp:指定抓取包的协议,当然,你也可以指定udp 等其他协议
以上代表了tcpdump支持的四种规则类型。不同类型的规则可以使用逻辑关键字连接。
另外,补充一个很有用的选项功能。
-F filename:
从filename里面读取规则表达式。指令中的规则表达式会被忽略。
这样,你就可以将规则写在filename里面保存下来了。
tcpdump还可以抓取特定包内容的数据包,用法是:
sudo tcpdump -Xlps0 -iany 'ip[35:2]=0x60' and dst port 10928 and 'ip[102:4]=10095530'
注意单引号''里面的内容,ip[35:2]=0x60表示从ip层第35个字节开始取2个字节,值是0x60
有的同学用-w filename将抓包的结果存到filename里面。这时要用tcpdump -r filename才能打开,否则会显示乱码。其实执行tcpdump的时候用重定向就可以了吧?