tcpdump是Linux下一个强大的抓包工具,支持针对网络层、协议、主机、网络或端口的过滤,凭借其强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。wireshark则是window下一个强大的抓包工具。
1. tcpdump使用教程
执行tcpdump --help命令后,tcpdump的使用语法如下:
tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
下面我们依次介绍各个选项的作用:
1.1 抓包选项
- -i interface:指定tcpdump需要监听的接口。默认会抓取第一个网络接口
- -c:指定要抓取的包数量,抓完后tcpdump就会停止
- -n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
- -nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
- -P:指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
1.2 输出选项
- -w:将抓包数据输出到文件中而不是标准输出,并不分析和打印出来。可以同时配合"-G
- -e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
- -q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
- -A:以ASCII码的形式显示数据包,抓取web数据时比较有用
- -X:输出包的头部数据,会以16进制和ASCII两种方式同时输出
- -XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
- -v:当分析和打印的时候,产生详细的输出。
- -vv:产生比-v更详细的输出。
- -vvv:产生比-vv更详细的输出。
- -l:使标准输出变为缓冲行形式;
- -t:在输出的每一行不打印时间戳;
- -s snaplen :snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。
1.3 其它功能性选项
- -F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
1.4 expression表达式
(1)类型 type
这里的type包括:host, net, port, portrange
例如:host 192.168.201.128 , net 128.3, port 20, portrange 6000-6008'
(2)目标 dir
例如:src, dst, src or dst, src and dst
(3)协议 proto
这里的协议包括:tcp, udp , icmp
多个表达式可以使用and和or组合,取反可以使用!号。
2. tcpdump实战演练
(1)抓取本机6379端口的tcp数据包,包括dst和src为6379的包
tcpdump -i lo -nn tcp port 6379
(2)抓取以本机6379为dst的tcp数据包:
tcpdump -i lo -nn tcp dst port 6379
(3)抓取以本机6379为dst和src的10个tcp数据包
tcpdump -i lo -c 10 -nn tcp port 6379
(4)把(3)中抓取的10个tcp数据包保存到文件中
tcpdump -i lo -c 10 -nn -w data tcp port 6379
此时保存到data中的内容为二进制形式,需要使用wireshark等工具才能解析出内容。
(5)只抓端口6379和6381的tcp数据包,其它端口不关心
tcpdump -i lo -c 10 -nn 'tcp port 6379 or tcp port 6381'
(6)对源IP和目的端口进行过滤
tcpdump -i lo -c 10 -nn 'src host 127.0.0.1 and tcp dst port 6379'
(7)把抓到的包的内容重定向到文件中
tcpdump -i lo -c 10 -nn 'src host 127.0.0.1 and tcp dst port 6379' >> data
3. wireshark使用教程
安装wireshark之后,选择一个网卡就可以进行抓包了,过滤包的规则如下:
(1). 过滤IP
过滤ip : ip.addr == ip
过滤源 ip : ip.src == ip
过滤目的ip : ip.dst == ip
(2). 过滤端口
过滤端口:tcp.port == port
过滤源端口: tcp.srcport == port
过滤目的端口: tcp.dstport == port
(3). 过滤协议
tcp、 ip、 udp、 http
(4). 逻辑操作符
and、 or、 not
(5). 比较操作符
==、 !=、 >、 >=、 <、 <=