tcpdump简明实用教程

网络包的五元组

在网络中,一个五元组确定一种网络包,五元组包括:

  • 协议,tcp或者udp等等
  • 源IP
  • 目的IP
  • 源端口
  • 目的端口

那么tcpdump在抓包的时候也是围绕这几个参数设置来过滤需要的数据包。下面来逐步学习tcpdump的使用。

包输入

网络数据是通过网卡来收发数据,但是一台计算机有可能有多个网卡,到底监听哪个网卡的数据呢?所以需要指定网口。

需要用参数-i来指定,i表示interface。

sudo tcpdump -i eth0  # 抓取eth0上的数据包
sudo tcpdump -i lo   # 抓取lo上的数据包

这里需要强调两点:

  • 使用tcpdump,需要sudo权限
  • 测试本地通信的程序,数据经过lo网口,要监听lo网口,不要监听eth0端口

网络数据包非常多,需要过滤自己需要的数据包,下面介绍过滤的方法。

包过滤

因为一个网口的数据包很多,但是我只想要我需要的,我要把我需要的过滤出来,这就叫过滤。

1、IP过滤

sudo tcpdump -i eth0 host 192.168.202.92      # 过滤包括192.168.202.92的数据包
sudo tcpdump -i eth0 src host 192.168.202.92  # 过滤包括源IP为192.168.202.92的数据包
sudo tcpdump -i eth0 dst host 192.168.202.92  # 过滤包括目的IP为192.168.202.92的数据包

host表示五元组的中的IP,如果进一步限制,就继续在前面加 src 或者 dst进行修饰限制。

2、端口过滤

sudo tcpdump -i eth0 port 19648
sudo tcpdump -i eth0 src port 19648
sudo tcpdump -i eth0 dst port 19648

这个和上面的IP过滤是相似的格式,不用多解释。

3、IP和端口组合过滤

sudo tcpdump -i eth0 dst host 192.168.202.92 and port 80     # 既包含特定的IP又要包含特定的端口
sudo tcpdump -i eth0 dst src host 192.168.202.92 and port 80 # 既包含特定的源IP又要包含特定的端口
sudo tcpdump -i eth0 dst host 192.168.202.92 and dst port 80 # 既包含特定的源IP又要包含特定的目的端口

这个组合就是对上面的IP和端口过滤的方式进行组合,这里使用 and 关键字,表示与的意思。

同时还有 or 关键字,or表示或的意思。

sudo tcpdump -i eth0 dst host 192.168.202.92 or port 19761 # 满足条件之一即可
sudo tcpdump -i eth0 not dst host 192.168.202.92 # 过滤目的IP不是192.168.202.92的数据包
sudo tcpdump -i eth0 not dst host 192.168.202.92 and not port 80 # 过滤目的IP不是192.168.202.92同时端口不是80的
sudo tcpdump -i eth0 dst host 192.168.202.92 or not src port 80 # 过滤目的IP是192.168.202.92 或者 源端口不是80的

4、协议过滤

协议过滤,常用的协议有ip,arp,tcp,udp,icmp等等,只需要和上面的方式进行组合即可。

sudo tcpdump -i eth0 udp # 过滤所有UDP包
sudo tcpdump -i eth0 udp and host 192.168.202.92 # 过滤ip是192.168.202.92的udp包
sudo tcpdump -i eth0 udp and host 192.168.202.92 and port 40948 # 过滤ip是192.168.202.92且端口是40948的udp包

其他的组合方式类似。

以上的包过滤方式,我认为已经可以解决大多数问题了。下面介绍一下其他的参数使用。

包输出

1、保存包到文件

有时候需要将抓到的包写入文件,然后再用wireshark打开分析。

sudo tcpdump -w udp.pacp -i eth0 udp 

这里使用 -w 参数,将过滤到包保存到udp.pcap文件中。

2、指定包的数量

  • -c 指定过滤一定数量的包
[KentZhang@local103-122 ~]$ sudo tcpdump -c 2 -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:39:01.511005 IP server.ha.xss.com.syslog > 10.10.100.252.syslog: SYSLOG cron.info, length: 97
11:39:01.511415 IP server.ha.boyaa.com.42251 > dc01.boyaa.com.domain:  18958+ PTR? 252.100.10.10.in-addr.arpa. (44)
2 packets captured
7 packets received by filter
0 packets dropped by kerne

3、显示IP和端口号

[KentZhang@local103-122 ~]$ sudo tcpdump -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:26:34.504652 IP server.ha.com.syslog > 10.10.100.252.syslog: SYSLOG daemon.info, length: 50
11:26:34.505276 IP server.ha.com.syslog > 10.10.100.252.syslog: SYSLOG user.info, length: 43
11:26:34.505788 IP server.ha.com.syslog > 10.10.100.252.syslog: SYSLOG user.info, length: 44
11:26:34.506273 IP server.ha.com.syslog > 10.10.100.252.syslog: SYSLOG user.info, length: 43

上面的过滤效果可以看到,源IP、源端口、目的端口,均没有显示出来,显示是域名和进程名。所以需要使用 -n参数,

  • -n 显示IP
  • -nn 显示IP和端口
[KentZhang@local103-122 ~]$ sudo tcpdump -nn -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:30:35.397586 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.info, length: 48
11:30:35.397717 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.notice, length: 108
11:30:37.290627 IP 192.168.202.92.35260 > 192.168.100.51.53:  2401+ AAAA? jobs123.com. (32)

4、显示时间戳

  • -tttt 显示时间戳
[KentZhang@local103-122 ~]$ sudo tcpdump -nn -tttt  -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
2018-11-10 11:32:51.202533 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.info, length: 48
2018-11-10 11:32:51.202683 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.notice, length: 108

5、以ASCII码打印

  • -A 以ASCII码打印
[KentZhang@local103-122 ~]$ sudo tcpdump -nn -A -tttt  -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
2018-11-10 11:33:30.306305 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.notice, length: 108
E.....@.@.@Z...\

d......t..<5>kernel: type=1700 audit(1541820810.269:155): dev=et
2018-11-10 11:33:37.386001 IP 192.168.202.92.52124 > 192.168.100.51.53:  55230+ AAAA? jobs.com. (32)
E..<.a@.@..n...\..d3...5.(...............jobs.xss.com.....
2018-11-10 11:33:37.386405 IP 192.168.100.51.53 > 192.168.202.92.52124:  55230* 1/1/0 CNAME[|domain]
...d3...\.5.....n.............jobs.com..............X...ops-uploa
2018-11-10 11:33:37.386476 IP 192.168.202.92.64472 > 192.168.100.51.53:  45448+ A? jobs.com. (32)
E..<.a@.@..n...\..d3...5.(...............jobs.xss.com.....
2018-11-10 11:33:37.386796 IP 192.168.100.51.53 > 192.168.202.92.64472:  45448* 2/0/0 CNAME[|domain]
E..o=.@.......d3...\.5...[...............jobs.xss.com..............X...ops-uploa

6、以ASCII和二进制同时打印

  • -XX 以ASCII和十六进制同时打印
[KentZhang@local103-122 ~]$ sudo tcpdump -nn -XX -tttt  -i eth0 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
2018-11-10 11:36:35.697994 IP 192.168.202.92.514 > 10.10.100.252.514: SYSLOG kernel.notice, length: 108
	0x0000:  0cda 4118 a65c f01f afe1 f61b 0800 4500  ..A..\........E.
	0x0010:  0088 0000 4000 4011 405a c0a8 ca5c 0a0a  ....@.@.@Z...\..
	0x0020:  64fc 0202 0202 0074 fa90 3c35 3e6b 6572  d......t..<5>ker
	0x0030:  6e65 6c3a 2074 7970 653d 3137 3030 2061  nel:.type=1700.a
	0x0040:  7564 6974 2831 3534 3138 3230 3939 352e  udit(1541820995.
	0x0050:  3636 343a 3135 3729 3a20 6465 763d 6574  664:157):.dev=et
2018-11-10 11:36:37.516281 IP 192.168.202.92.55188 > 192.168.100.51.53:  29533+ AAAA? jobs.xss.com. (32)
	0x0000:  0cda 4118 a65c f01f afe1 f61b 0800 4500  ..A..\........E.
	0x0010:  003c 9c03 4000 4011 eecc c0a8 ca5c c0a8  .<..@.@......\..
	0x0020:  6433 d794 0035 0028 b01a 735d 0100 0001  d3...5.(..s]....
	0x0030:  0000 0000 0000 046a 6f62 7305 626f 7961  .......jobs.boya
	0x0040:  6103 636f 6d00 001c 0001                 a.com.....

谈谈如何记忆参数的使用

关于tcpdump的使用教程非常多,但是大部分都是极其相似,如果没有按照自己的思维方式进行总结个归纳,那么这个命令的使用很容易忘记。如果等到需要使用的时候再去网上查,那么筛选信息的成本就非常高,这就降低了自己的工作效率。

根据以上我总结的模块,可以看到,tcpdump的参数分为三个部分:

  • 输入 -i 指定网口
  • 过滤 端口 ip 协议的组合过滤
  • 输出 写文件或打印输出

其中在过滤中,端口、IP、协议需要使用and、or、not组合。

所以一个tcpdump的命令格式就是:

tcpdump (输出参数) (输入参数) (过滤参数)

使用模块化的方式,更容易记忆,更清楚参数的排列,以及组合方式。

[KentZhang@local103-122 ~]$ sudo tcpdump -c 2 -nn -XX -tttt -i eth0 tcp and host 192.168.202.92
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
2018-11-10 11:59:43.674912 IP 192.168.202.92.55225 > 192.168.100.17.6379: P 4250024641:4250024733(92) ack 511953561 win 2396
	0x0000:  0cda 4118 a65c f01f afe1 f61b 0800 4500  ..A..\........E.
	0x0010:  0084 18e3 4000 4006 71d2 c0a8 ca5c c0a8  ....@.@.q....\..
	0x0020:  6411 d7b9 18eb fd52 3ac1 1e83 ca99 5018  d......R:.....P.
	0x0030:  095c b035 0000 2a35 0d0a 2437 0d0a 6576  .\.5..*5..$7..ev
	0x0040:  616c 7368 610d 0a24 3430 0d0a 3332 3336  alsha..$40..3236
	0x0050:  6334 3436 6433 6238 3736 3236 3566 6534  c446d3b876265fe4
2018-11-10 11:59:43.675481 IP 192.168.100.17.6379 > 192.168.202.92.55225: P 1:5(4) ack 92 win 229
	0x0000:  f01f afe1 f61b 0cda 4118 a65c 0800 4500  ........A..\..E.
	0x0010:  002c 2141 4000 3e06 6bcc c0a8 6411 c0a8  .,!A@.>.k...d...
	0x0020:  ca5c 18eb d7b9 1e83 ca99 fd52 3b1d 5018  .\.........R;.P.
	0x0030:  00e5 b5b8 0000 2a30 0d0a 0000            ......*0....
2 packets captured
43 packets received by filter
0 packets dropped by kernel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值