10.22 tcpdump:监听网络流量

【功能说明】

tcpdump命令是一个截获网络数据包的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析。它支持针对网络层、协议、主机、端口等的过滤,并支持与、或、非逻辑语句协助过滤有效信息。
tcpdump命令工作时要先把网卡的工作模式切换到混杂模式(promiscuous mode)。因为要修改网络接口的工作模式,所以tcpdump命令需要以root的身份运行。

【语法格式】

tcpdump [option] [expression] 
tcpdump [选项]    [表达式]
 
表10-23 tcpdump 命令的参数选项及说明
参数选项            解释说明
-A                   以ASCII码的方式显示每一个数据包(不会显示数据包中链路层的头部信息)。在抓取包含网页数据的数据包时,可方便查看数据
-c<数据包数目>        接收到指定的数据包数目后退出命令
-e                   每行的打印输出中将包括数据包的数据链路层头部信息
-i<网络接口>         指定要监听数据包的网络接口
 
-n                  不进行DNS解析,加快显示速度
-nn                 不将协议和端口数字等转换成名字
-q                  以快速输出的方式运行,此选项仅显示数据包的协议概要信息,输出信息较短
-s<教据包大小>       设置数据包抓取长度,如果不设置则默认为68等节,设置为0则自动选择合适的长度来抓取数据包
-t                  在每行输出信息中不显示时间截标记
-tt                 在每行输出信息中显示无格式的时间载标记
-ttt                显示当前行与前一行的延迟
-tttt               在每行打印的时间戳之前添加日期
-ttttt              显示当前行与第一行的延迟
-v                  显示命令执行的详细信息
-vv                 显示比-v选项更加详细的信息
-vvv                显示比-vv选项更加详细的输出
 

使用范例

不加参数运行tcpdump命令监听网络。

[root@lewen ~]# tcpdump    #默认清况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
...
 
使用tcpdump命令时,如果不输入过滤规则,则输出的数据量将会很大。 
 
精简输出信息。
 
[root@lewen ~]# tcpdump -q
04:08:32.963134 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963256 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.963325 IP 10.0.0.1.10662 > lewen.ssh: tcp 0
04:08:32.963390 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963492 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.964604 IP lewen.ssh > 10.0.0.1.10662: tcp 116
 
 
[root@lewen ~]# tcpdump -c 5  #使用-c选项指定监听的数据包数量,这样就不需要使用Ctrl+C了。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:09:50.191752 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 3827665832:3827666044, ack 1911166938, win 274, length 212
04:09:50.192434 IP lewen.44182 > public1.alidns.com.domain: 5716+ PTR? 1.0.0.10.in-addr.arpa. (39)
04:09:50.245211 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 212, win 8212, length 0
04:09:50.257155 IP public1.alidns.com.domain > lewen.44182: 5716 NXDomain 0/1/0 (116)
04:09:50.258230 IP lewen.36787 > public1.alidns.com.domain: 45732+ PTR? 81.0.0.10.in-addr.arpa. (40)
5 packets captured
21 packets received by filter
0 packets dropped by kernel

监听指定网卡收到的数据包

[root@lewen ~]# 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
04:11:33.924611 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 651624, win 8209, length 0
04:11:33.924679 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651624:651884, ack 105, win 274, length 260
04:11:33.924776 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651884:652048, ack 105, win 274, length 164
04:11:33.924834 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652048, win 8207, length 0
04:11:33.924901 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652048:652308, ack 105, win 274, length 260
04:11:33.929182 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652308:652472, ack 105, win 274, length 164
04:11:33.931108 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652472, win 8212, length 0
04:11:33.931140 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652472:652636, ack 105, win 274, length 164
 
 
04:11:33.931140:当前时间,精确到微秒。
IP lewen.ssh > 10.0.0.1.10662:从主机lewen的SSH端口发送数据到10.0.0.1的10662端口,“>”代表数据流向。
Flags[P.]:TCP包中的标志信息,S是SYN标志的缩写,F(FIN)、P(PUSH)、R(RST)、"."(没有标记)。
seq:数据包中的数据的顺序号。
ack:下次期望的顺序号。
win:接收缓存的窗口大小。
length:数据包长度。

监听指定主机的数据包

[root@lewen ~]# tcpdump -n host 10.0.0.1    #<=使用-n选项不进行DNS解析,加快显示地度。监听指定主机的关键字为host,后面直接接主机名或了IP地址即可。本行命令的作用是监听所有10.0.0.1的主机收到的和发出的数据包。
 
[root@lewen ~]# tcpdump -n src host 10.0.0.1    #<-只监听从10.0.0.1发出的数据包,即源地址为10.0.0.1,关键字为src(source,原地址)。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:20:55.821984 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 3862927143, win 4106, length 0
20:20:55.866408 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 149, win 4105, length 0
20:20:55.907580 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 297, win 4105, length 0
20:20:55.950705 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 445, win 4104, length 0
20:20:55.991940 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 593, win 4103, length 0
20:20:56.032129 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 741, win 4103, length 0

   
[root@lewen ~]# tcpdump -n dst host 10.0.0.1    #<==只监听10.0.0.1收到的数据包,即目标地址为10.0.0.1,关就字为dst(destination,目的地)。
20:22:13.074240 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506496:506660, ack 53, win 252, length 164
20:22:13.074331 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506660:506824, ack 53, win 252, length 164

监听指定端口的数据包

[root@lewen ~]# tcpdump -nn port 22       #使用-n选项不进行DNS解析,但是其会将一些协议、端口进行转换,比如22端口转为ssh。因此本例使用nn 选项。监听指定端口的关键字是port,后面接上端口号即可
 
20:24:26.193100 IP 10.0.0.1.14389 > 10.0.0.7.22: Flags [.], ack 556296, win 4101, length 0
20:24:26.193225 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556296:556556, ack 105, win 252, length 260
20:24:26.193535 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556556:556720, ack 105, win 252, length 164

监听指定协议的数据包。

 
[root@lewen ~]# tcpdump -n arp      #<--监听ARP数据包,因此表达式直接写arp即可。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:26:43.219758 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:43.511133 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:44.224050 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:44.512986 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:45.230012 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
 
 
[root@lewen ~]# tcpdump -n icmp     #<-监听icmp数据包(想要查着下面的监拉数据,可以使用其他机器ping本机即可)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:27:31.377258 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 49207 unreachable, length 127
20:27:31.479590 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 48776 unreachable, length 135
 
常见的协议关键字有ip、arp、icmp、tcp、udp等类型。 

 多个过滤条件混合使用

前面的几种方法都是使用单个过滤条件过滤数据包,其实过滤条件可以混合使用,因为tcpdump命令支持逻辑运算符and(与)、or(或)、!(非)。
 
[root@lewen ~]# tcpdump -n ip host 10.0.0.7 and ! 10.0.0.1    #<==获取主机10.0.0.7与所有主机(除了主机10.0.0.1之外)通信的ip数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:29:42.366445 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [S], seq 1999440710, win 29200, options [mss 1460,sackOK,TS val 75899232 ecr 0,nop,wscale 7], length 0
20:29:42.366483 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [S.], seq 920922656, ack 1999440711, win 28960, options [mss 1460,sackOK,TS val 80531477 ecr 75899232,nop,wscale 7], length 0
20:29:42.366628 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 0
20:29:42.366674 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:15, ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 14
20:29:42.366681 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [.], ack 15, win 227, options [nop,nop,TS val 80531477 ecr 75899232], length 0
20:29:42.371129 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [S], seq 2767440940, win 29200, options [mss 1460,sackOK,TS val 75899236 ecr 0,nop,wscale 7], length 0
20:29:42.371153 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51644: Flags [S.], seq 3632462468, ack 2767440941, win 28960, options [mss 1460,sackOK,TS val 80531482 ecr 75899236,nop,wscale 7], length 0
20:29:42.371313 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899237 ecr 80531482], length 0
20:29:42.371397 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:25, ack 1, win 229, options [nop,nop,TS val 75899237 ecr 8

 

利用tcpdump抓包详解tcp/ip 连接和断开过程的案例。

1)正常的TCP连接的三个阶段。
  1. TCP三次握手
  2. 数据传送
  3. TCP四次断开
2)TCP连接图示。
    TCP连接的状态机制如图10-6所示。
3)TCP的状态标识。
  • SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
  • ACK:(确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收了所有的数据。
  • FIN:(结束标志,FINish)用来结束一个TCP回话。但对应端口仍然处于开放状态,准备接收后续数据。
 
There are 8 bits in the control bits section of the TCe header:
CWR | ECE | URG | ACK| PSH | RST|SYN|FIN
 
[root@doit ~]# tcpdump tcp dst port 80 or src 104.243.30.169 -i eth0 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:35:59.136119 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2702154317:2702154529, ack 1793279353, win 501, length 212
20:35:59.136535 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 212:408, ack 1, win 501, length 196
20:35:59.137177 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 408:588, ack 1, win 501, length 180
20:35:59.137818 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 588:768, ack 1, win 501, length 180
20:35:59.138447 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 768:948, ack 1, win 501, length 180
20:35:59.139087 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 948:1128, ack 1, win 501, length 180
20:35:59.139729 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1128:1308, ack 1, win 501, length 180
20:35:59.140360 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1308:1488, ack 1, win 501, length 180
20:35:59.140996 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1488:1668, ack 1, win 501, length 180
20:35:59.141636 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1668:1848, ack 1, win 501, length 180
20:35:59.142273 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1848:2028, ack 1, win 501, length 180
20:35:59.142908 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2028:2208, ack 1, win 501, length 180
 
 
 
posted @ 2019-03-24 20:48  Fadewalk  阅读(1147)  评论(0编辑  收藏  举报