[root@test ~]# tcpdump -i ens39 -nn -X 'port 22' -c 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens39, link-type EN10MB (Ethernet), capture size 262144 bytes 14:31:53.579814 IP 192.168.146.6.62625 > 192.168.146.131.22: Flags [P.], seq 614429695:614429763, ack 3852162272, win 4101, length 68 0x0000: 4500 006c 4cc9 4000 8006 07e8 c0a8 9206 E..lL.@......... 0x0010: c0a8 9283 f4a1 0016 249f 73ff e59b 54e0 ........$.s...T. 0x0020: 5018 1005 b7e2 0000 0000 0020 8b78 77e3 P............xw. 0x0030: d830 0129 84fe 2b2e b27e cebb 8b81 ca8d .0.)..+..~...... 0x0040: 1dde fb10 3e63 0694 e48e 773d 9fcd 072d ....>c....w=...- 0x0050: 6fd9 30a1 73be c6bb a8f3 64a2 f406 4acf o.0.s.....d...J. 0x0060: 6aec 95b2 656f 2d67 0344 f6de j...eo-g.D.. 1 packet captured 3 packets received by filter 0 packets dropped by kernel
解释第2行
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
这是一句贴心的提醒,就是说你的命令里没有用到-v和-vv,如果希望看到更多的内容,可以使用这两个命令。
解释第3行
listening on ens39, link-type EN10MB (Ethernet), capture size 262144 bytes
这一句表示我们监听的是流经ens39这个网卡的网络包,且它的链路层是基于以太网的,要抓的包大小限制是262144字节。
解释第4行
14:31:53.579814 IP 192.168.146.6.62625 > 192.168.146.131.22: Flags [P.], seq 614429695:614429763, ack 3852162272, win 4101, length 68
”14:31:53.579814“ :分别对应着这个包被抓到的 ‘时’、‘分’、‘秒’、‘微秒’ 。
“IP” :表示这个包在网路层,是IP包 。
“192.168.146.6.62625” : 表示这个包的源IP为192.168.146.6,源端口为62625 。
“ > ” : 表示数据包的传输方向 。
“192.168.146.131.22” :表示这个包要发向的目的端IP是192.168.146.131,目的端口为22 。
解释5/6/7/8 行
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...Kn这几行便是IP包的内容了,是除去以太网之后剩下的内容,其中,左侧部分是十六进制内容,右侧部分是相应的ASCII码内容。
如上,最外层是IP数据包,最开始的一个字节(8位)中,前4位(bit)表示IP的版本,此处为4,表示这是一个IPv4版本的IP包。后4位(bit)表示此IP的首部长度此处的数字是5,由于单位是“4字节”,因此可以计算得出这个IP包的首部长度是固定的20字节。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...Kn如上所示,在IP版本和首部长度之后,接下来的一个字节(8位)是“00”,这是IP协议的服务类型域(TOS),由于很少使用,因此此处设置为00.
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...Kn如上所示,后面的2字节(16位)是“006c”,表示整个IP包的总长度(首部长度+数据长度),单位是字节。因此可以知道这个IP包的总长度是108字节.
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...Kn如上所示,这是2字节(16位)的“表示域”,如果IP包的大小超过了数据链路层的MTU限制,就需要对IP包进行分拆,此时就要用这个域来表示哪些在分拆前是同一组的。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...Kn如上所示,便是3位(bit)的标志位,最高位为保留位,中间一位为DF(don't fragment),最低位为MF(more fragment),这三位是用来控制IP拆包后的组装所用。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,是8位(bit)的TTL(Time To Live,即生存周期),此包的值位0x80,换算成十进制是128,这表明这个网络包,如果经过超过128个中间路由节点,则认为目的地不可达,中间路由器会将此包抛掉。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,8位(bit)为协议域,用于指代上一层协议类型,此处的值为0x06,对应 十进制是6,而6是TCP协议的代号,因此可以知道这个网络包所用的传输协议是TCP。(UDP的协议号是17,TCMP的协议号是1).
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K
如上所示,2个字节表示IP首部校验和,此处计算出来的结果是07cf。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,这就是我们非常熟悉的4字节的IP源地址,即 “coa8 9206”,转换成IP地址为192.168.146.6 。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,这个4字节为IP目的地址,即 “c0a8 9283”,转成IP地址为 192.168.146.131 .
以上,网络层IP协议的首部20字节,下面是进入传输层UDP协议的包分析阶段。
UDP协议包分析
UDP包的首部总共有8个字节 (如下)
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...KUDP首部的前2个字节为源端口,此处为 f4a1 ,即62625.后面的2字节是目的端口,值为 0016 ,即22 (ssh服务).
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,这2字节则表示UDP包的总长度 ( 报头+数据部分) 此处为 249f,转换成十进制是9375,表示UDP包的总长度为9375字节,减去首部的8字节还有9367字节来存储真正要传输的数据。而UDP首部的最后2个字节是“校验和”部分,此处的值为7667。
0x0000: 4500 006c 4ce2 4000 8006 07cf c0a8 9206 E..lL.@.........
0x0010: c0a8 9283 f4a1 0016 249f 7667 e59b 5668 ........$.vg..Vh
0x0020: 5018 1009 8eae 0000 0000 0020 a29f 050f P...............
0x0030: 014f e8f7 9bea 266e aa78 43bc 89be 4b6e .O....&n.xC...K如上所示,则是应用层协议的内容。