tcpdump 抓包分析

抓取 arp 包分析

  1. 主机1:192.168.152.128
    主机2:192.168.152.129
    使用 arp -n 查看本机 arp 缓存。在执行抓包分析前,需要清除相应 arp 缓存,使用命令 arp -d IP地址。
  2. 在主机1上执行如下命令,在敲下命令回车后,主机1 监听两主机间数据包的传输。此时我们采用在主机2上ping 主机1,使用 ping 包
    分析 arp 包。因为在发出 ping 包之前,需要对端 MAC 地址。
[root@yangzhen ~]# tcpdump -i ens33 -X -ent '(dst 192.168.152.128 and src 192.168.152.129) or (dst 192.168.152.129 and src 192.168.152.128)'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
00:0c:29:bb:ac:d3 > Broadcast, ethertype ARP (0x0806), length 60: Request who-has 192.168.152.128 tell 192.168.152.129, length 46
	0x0000:  0001 0800 0604 0001 000c 29bb acd3 c0a8  ..........).....
	0x0010:  9881 0000 0000 0000 c0a8 9880 0000 0000  ................
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
00:0c:29:85:6e:73 > 00:0c:29:bb:ac:d3, ethertype ARP (0x0806), length 42: Reply 192.168.152.128 is-at 00:0c:29:85:6e:73, length 28
	0x0000:  0001 0800 0604 0002 000c 2985 6e73 c0a8  ..........).ns..
	0x0010:  9880 000c 29bb acd3 c0a8 9881            ....).......
00:0c:29:bb:ac:d3 > 00:0c:29:85:6e:73, ethertype IPv4 (0x0800), length 98: 192.168.152.129 > 192.168.152.128: ICMP echo request, id 7124, seq 1, length 64
	0x0000:  4500 0054 c604 4000 4001 c251 c0a8 9881  E..T..@[email protected]....
	0x0010:  c0a8 9880 0800 0ea4 1bd4 0001 e31d a85c  ...............\
	0x0020:  0000 0000 7639 0d00 0000 0000 1011 1213  ....v9..........
	0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
	0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
	0x0050:  3435 3637                                4567
00:0c:29:85:6e:73 > 00:0c:29:bb:ac:d3, ethertype IPv4 (0x0800), length 98: 192.168.152.128 > 192.168.152.129: ICMP echo reply, id 7124, seq 1, length 64
	0x0000:  4500 0054 2f5e 0000 4001 98f8 c0a8 9880  E..T/^..@.......
	0x0010:  c0a8 9881 0000 16a4 1bd4 0001 e31d a85c  ...............\
	0x0020:  0000 0000 7639 0d00 0000 0000 1011 1213  ....v9..........
	0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
	0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
	0x0050:  3435 3637                                4567

为便于包分析,查看两主机ip地址
主机1

[root@yangzhen ~]# ip a show ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:85:6e:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.128/24 brd 192.168.152.255 scope global dynamic ens33
       valid_lft 1017sec preferred_lft 1017sec
    inet6 fe80::20c:29ff:fe85:6e73/64 scope link 
       valid_lft forever preferred_lft forever

主机2

[root@yz ~]# ip a show ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bb:ac:d3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.129/24 brd 192.168.152.255 scope global dynamic ens33
       valid_lft 1699sec preferred_lft 1699sec
    inet6 fe80::20c:29ff:febb:acd3/64 scope link 
       valid_lft forever preferred_lft forever
  1. arp 包分析
    在进行任何抓包分析之前,首先需要了解下 arp 包格式。arp 包如下:
    tcpdump 抓包分析_第1张图片
    字段说明:
    帧类型:对 arp 协议来讲,值为 0x0806。对于 RARP,值为0x8035。
    硬件类型:表示硬件地址的类型。值为1 时表示以太网地址,即 arp 不仅仅应用于以太网协议,还支持别的链路层协议。
    协议类型:表示协议地址类型,对于 IPv4,值为 0x0800。
    硬件地址长度:与硬件类型对应的硬件地址长度,以字节为单位,如果是以太网协议,是 6 字节。
    协议地址长度:与协议地址对应的协议地址长度,以字节为单位,如果是 IPv4,则是 4 字节。
    操作类型:arp请求为1,arp应答为2,rarp请求为3,rarp应答为4。
    发送端硬件地址:如果是以太网,则是源主机以太网地址。
    发送端协议地址:表示源主机 IP 地址。
    目标硬件地址:如果是 arp 请求,则为0即可。arp应答的话,需要填充该字段。
    目标协议地址:表示目的 IP 地址。

ping 包分析
还根据上述抓包来分析 ping 数据包。ping 数据包封装在 ip 数据包中。ip数据包头部字节大小为 20。ping 数据包格式如下
tcpdump 抓包分析_第2张图片
字段分析
类型:ping 请求报文类型是8,应答是0。
代码:字段为 0。
8为类型和8位代码一起决定了ICMP报文类型。
类型8, 代码0,表示 ping 请求。类型 0,代码 0,表示 ping 应答。类型 11, 代码 0, 表示超时。
校验和:表示数据在内的整个 ICMP 数据包的校验和。和 IP 头部计算校验和一样。
标识符:占 2 字节,用于标识本 ICMP 进程。但仅用于回显请求和回显应答报文。对于目标不可达和超时 ICMP 报文,该字段为 0。
表示发起方 ping 进程。

IP 报文分析
IP 数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度一般 20 至 60 字节,其中后 40 字节是可选的,长度不固定,前
20 字节是固定的。数据负载部分长度可变,整个 IP 数据包最大长度 65536 字节。
报文格式
tcpdump 抓包分析_第3张图片
字段分析
版本号:长度 4 比特位,IPv4 的值为 0100,IPv6 的值为 0110。
首部长度:如果首部长度是 20 字节,则为 5。
服务类型:实际应用中很少用,路由器通常忽略该值。
总长度:指 IP报文总长度,在以太网中允许的最大的包长为 1500 字节,超过允许的最大长度时需要将数据分片。
标识符:在ip分片以后,用来标识同一片分片的。方便ip分片的重组。
标志:长度为 3 位,三位从左到右分别为MF、DF、未用。MF=1表示后面还有分段的数据包,MF=0表示没有更多分片(即最后一个分片)
DF=1表示路由器不能对该数据包分段,DF=0表示数据包可以被分段。
生存时间:初始值由操作系统设置,每经过一个路由器转发后其值就减 1,减至0后丢弃该包。这种机制可以避免数据包找不到目地时不断
被转发,堵塞网络。linux 默认是64,windows默认是128。
协议:标识上层所使用的的协议。
首部校验和:只对IP数据包首部进行校验,不包含数据部分。数据包每经过一个中间节点都要重新计算首部校验和,对首都进行检验。

你可能感兴趣的:(tcpdump)