介绍
tcpdump 即dump traffic on network,它是根据使用者的定义对网络上的数据包进行截获并分析的工具。
tcpdump支持网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句过滤不必要的信息
ps:Linux系统下普通用户不能执行tcpdump,一般root用户执行。
参数
[root@lhuan ~]# tcpdump -htcpdump version 4.9.2libpcap version 1.5.3OpenSSL 1.0.2k-fips 26 Jan 2017Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q|-P 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 ]
| 参数 | 说明 |
|---|---|
| -A | 以ASCII码方式显示每一个数据包,在程序调试的时候便于查看数据 |
| -a | 将网络地址和广播地址变成名字 |
| -c | tcpdump工具将在接收到指定数据的数据包后退出 |
| -d | 将匹配信息包的代码转换成人们能够理解的汇编格式 |
| -dd | 将匹配到的信息包的代码转换成C语言程序段的格式 |
| -ddd | 将匹配到的信息转换成10进制的形式 |
| -e | 在输出行打印初数据链路层的头部信息 |
| -f | 将百度的Internet地址以数字的形式打印出来 |
| -F | 使用文件作为过滤条件表达式的输入,此时命令上的输入将被忽略 |
| -i | 指定监听的网络接口 |
| -l | 使标准输出变为缓冲行形式 |
| -n | 不把网络地址转换成名字 |
| -N | 不打印host的域名部分 |
| -q | 打印很少的协议相关信息,从而使输出行都比较简短 |
| -r | 从文件file中读取包数据 |
| -s | 设置tcpdump的数据包抓取长度,如果不设置默认为68字节 |
| -t | 在输出的每一行不打印时间戳 |
| -tt | 不对每行输出的时间进行格式处理 |
| -ttt | tcpdump输出的时候,每两行打印之间会延迟一个时间段,以毫秒为单位 |
| -c | 输出一个稍微详细的信息 eg:在IP包中可以包括TTL和服务类型的信息 |
| -vv | 输出详细的报文信息 |
| -vvv | 产生比-vv更详细的输出 |
| -x | 当分析和打印的时候,tcpdump会打印每个包的头部数据,同时会以16进制打印出每一个包的数据,但不包括连接层的头部 |
| -xx | tcpdump会打印每个包的头部数据,同时会以16进制打印出每一个包的数据,但不包括连接层的头部 |
| -X | tcpdump会打印每一个包的头部数据,同时会以16进制和ASCII码形式打印出每个包的数据,其中不包括数据链路层的头部 |
| -XX | tcpdump会打印每一个包的头部数据,同时会以16进制和ASCII码形式打印出每个包的数据,其中包括数据链路层的头部 |
使用
[root@lhuan ~]# tcpdumptcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes13:55:22.248362 IP lhuan.ssh > 114.229.154.98.64232: Flags [P.], seq 3417176744:3417176956, ack 385250539, win 251, length 21213:55:22.248665 IP lhuan.54574 > 183.60.83.19.domain: 22715+ PTR? 98.154.229.114.in-addr.arpa. (45)13:55:22.249517 IP 183.60.83.19.domain > lhuan.54574: 22715 NXDomain 0/1/0 (94)13:55:22.250598 IP lhuan.42142 > 183.60.83.19.domain: 57067+ PTR? 3.0.17.172.in-addr.arpa. (41)13:55:22.251304 IP 183.60.83.19.domain > lhuan.42142: 57067 NXDomain* 0/1/0 (100)13:55:22.251658 IP lhuan.34740 > 183.60.83.19.domain: 38112+ PTR? 19.83.60.183.in-addr.arpa. (43)13:55:22.252219 IP 183.60.83.19.domain > lhuan.34740: 38112 NXDomain 0/1/0 (107)13:55:22.261084 IP 114.229.154.98.64232 > lhuan.ssh: Flags [.], ack 212, win 514, length 013:55:22.721914 IP lhuan.37534 > 169.254.0.55.lsi-bobcat: Flags [.], seq 1224411396:1224412820, ack 3380290971, win 49376, length 142413:55:22.721930 IP lhuan.37534 > 169.254.0.55.lsi-bobcat: Flags [P.], seq 1424:2651, ack 1, win 49376, length 1227
tcpdump不跟任何参数,tcpdum会从系统接口列表中搜寻编号最小的已配置好的接口,不包括loopback接口,一旦找到第一个符合条件的接口,搜寻立马结束,并将获取的数据包打印处理
tcpdump利用表达式(可以是正则表达式)作为过滤数据包的条件。
表达式关键字:
1.关于类型的关键字。eg:host、net、port
2.确定数据包传输方向的关键字。eg:src、dst、dst or src 、dst and src
如果没有指明方向关键字,默认是dst or src 关键字
3.协议的关键字,指明是TCP还是UDP协议
三种逻辑运算:
非运算:not 或 !
与运算:and 或 &&
或运算: or 或 ||
监视指定网络接口的数据包
[root@lhuan ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:13:12.448881 IP lhuan.ssh > 114.229.154.98.62930: Flags [P.], seq 3367461942:3367462154, ack 3383878235, win 251, length 212
15:13:12.449218 IP lhuan.53350 > 183.60.83.19.domain: 40703+ PTR? 98.154.229.114.in-addr.arpa. (45)
15:13:12.502408 IP 114.229.154.98.62930 > lhuan.ssh: Flags [.], ack 212, win 516, length 0
15:13:12.541185 IP 183.60.83.19.domain > lhuan.53350: 40703 NXDomain 0/1/0 (94)
15:13:12.542450 IP lhuan.60889 > 183.60.83.19.domain: 24216+ PTR? 3.0.17.172.in-addr.arpa. (41)
监视指定主机的数据包,例如所有进入或离开node1的数据包
tcpdump -i ens33 host node1
打印node1<—>node2或node1<—>node3之间通信的数据
tcpdump -i ens33 host node1 and \(node2 or node3\)
抓取ping包
tcpdump -c 5 -nn -i ens33
==指定主机抓ping包==
tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62
解析包数据
tcpdump -c 2 -q -XX -vvv -nn -i ens33 tcp dst port 22
抓取到本机22端口包
tcpdump -c 10 -nn -i eth0 tcp dst port 22
[root@lhuan ~]# tcpdump -c 10 -nn -i eth0 tcp dst port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:16:37.582784 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [P.], seq 3383880899:3383880951, ack 3367466426, win 516, length 52
\15:16:37.597057 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 409, win 515, length 0
15:16:37.648695 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 557, win 514, length 0
15:16:37.709879 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 705, win 514, length 0
15:16:37.761094 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 853, win 513, length 0
15:16:37.811901 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 1001, win 513, length 0
15:16:37.863025 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 1149, win 512, length 0
15:16:37.915769 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 1297, win 511, length 0
15:16:37.969612 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 1445, win 517, length 0
15:16:38.022445 IP 114.229.154.98.62930 > 172.17.0.3.22: Flags [.], ack 1593, win 516, length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel
