(base) root@ubuntu:~# sudo tcpdump -i -X ens33 -nt -s 5000 port domain
tcpdump: -X: No such device exists
(SIOCGIFHWADDR: No such device)
(base) root@ubuntu:~# sudo tcpdump -i ens33 -nt -s 5000 port domain
IP 192.168.0.107.46401 > 192.168.0.1.53: 1876+ [1au] A? www.baidu.com. (42)
IP 192.168.0.1.53 > 192.168.0.107.46401: 1876 3/0/1 CNAME www.a.shifen.com., A 180.101.49.12, A 180.101.49.11 (104)
命令行
使用port domain 来过滤数据包,表示只抓取使用domain服务的数据包
数据内容有两条
第一条是查询报文 源 > 目的
数值1876是DNS报文的标识,也出现在应答中。“+”表示启用递归查询,“A?”表示采用A类型查询方式 www.baidu.com查询中的域名 (42)DNS报文的长度
第二条是反馈DNS报文 3/0/1 表示报文中有三个应答资源记录,0个授权资源记录,1个额外信息记录。CNAME www.a.shifen.com., A 180.101.49.12, A 180.101.49.11 代表三个应答资源记录。CNAME 表示紧随其后的是机器别名,A紧随其后的是IP地址;104应答报文长度。
再开一个终端
(base) root@ubuntu:~# host -t A www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 180.101.49.11
www.a.shifen.com has address 180.101.49.12
host
参数
-t 告诉DNS协议使用哪种查询类型,A类型 通过机器的域名获得其IP地址
输出
1)www.baidu.com 是 www.a.shifen.com.的别名
2)两个IP地址
(base) root@ubuntu:~# telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Ubuntu 18.04.6 LTS
ubuntu login:
再开一个终端
(base) root@ubuntu:~# tcpdump -ntx -i lo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 127.0.0.1.34552 > 127.0.0.1.23: Flags [S], seq 1745940003, win 65495, options [mss 65495,sackOK,TS val 210102712 ecr 0,nop,wscale 7], length 0
0x0000: 4510 003c b6a2 4000 4006 8607 7f00 0001
0x0010: 7f00 0001 86f8 0017 6810 ee23 0000 0000
0x0020: a002 ffd7 fe30 0000 0204 ffd7 0402 080a
0x0030: 0c85 e9b8 0000 0000 0103 0307
telnet使用的端口号是23,而客户端使用的临时端口号34552
分析IP头部信息
十六进制 | 十进制 | IP头部信息 |
---|---|---|
0x4 | 4 | IP版本号 |
0x5 | 5 | 头部长度为5个32位(20字节) |
0x10 | TOS选项中最小延时服务开启 | |
0x3c | 60 | 数据总长度 |
0xb6a2 | 数据包标识 | |
0x4 | 禁止分片标识 | |
0x000 | 分片偏移 | |
0x40 | 64 | TTL被设置为64 |
0x06 | 协议字段为6,表示上层协议是TCP协议 | |
0x8607 | IP头部校验和 | |
0x7f00 0001 | 源端IP地址 127.0.0.1 | |
0x7f00 0001 | 目的端IP地址 127.0.0.1 |
TCP头分析
十六进制 | 十进制 | IP头部信息 |
---|---|---|
0x86f8 | 34552 | 源端口号 |
0x0017 | 23 | 目的口号 |
0x6810ee23 | 34552 | 序号 |
0x00000000 | 0 | 确认号 |
0xa | 10 | TCP头部长度为10个32位(40字节) |
0x002 | 设置SYNC标志 | |
0xffd7 | 接收通告窗口大小 | |
0xfe30 | 头部校验和 | |
0x0000 | 没有设置URG标识 | |
0x0204 | 最大报文段长度选项的kind值和length值 | |
0xffd7 | 65495 | 最大报文段长度 |
0x0402 | 允许SACK选项 | |
0x080a | 时间戳的kind值和length值 | |
0x0c85e9b8 | 210102712 | 时间戳 |
0x0000 0000 | 0 | 回显应答时间戳 |
0x01 | 空操作选项 | |
0x0303 | 窗口扩大因子的Kind值和length值 | |
0x07 | 7 | 窗口扩大因子为7 |
以太网的MTU是1500字节,因此携带的数据包最多1480(TP头部占用20)
用IP数据报封装1481长度的ICMP报文,需要分片。
1)除最后一个分片其他分片都将设置MF标识
2)ICMP头部只有一份
电脑1
root@ubuntu:~# ping 192.168.0.107 -s 1473
PING 192.168.0.107 (192.168.0.107) 1473(1501) bytes of data.
1481 bytes from 192.168.0.107: icmp_seq=1 ttl=64 time=0.244 ms
1481 bytes from 192.168.0.107: icmp_seq=2 ttl=64 time=0.170 ms
电脑2
root@ubuntu:~# tcpdump -ntv -i ens33 icmp
IP (tos 0x0, ttl 64, id 23248, offset 0, flags [+], proto ICMP (1), length 1500)
192.168.0.103 > 192.168.0.107: ICMP echo request, id 2708, seq 1048, length 1480
IP (tos 0x0, ttl 64, id 23248, offset 1480, flags [none], proto ICMP (1), length 21)
192.168.0.103 > 192.168.0.107: ip-proto-1
第一个分片 偏移 0 MF被设置1 所以flags[+] 长度1500
第二个分片 偏移1480 没有分片 所以flags[none] 长度21