参考书籍 《从实践中学习 TCP/IP协议》 大学霸IT达人 编著
基于NETWOX软件的TCP/IP协议栈各协议解读
TCP/IP协议栈
1. 网络概述
1.1 TCP/IP协议层次结构
1.2 网络工具集netwox
介绍:
netwox可以创造任意的TCP、UDP和IP数据报文,以实现网络欺骗。该工具包含了超过200个不同的功能,这里被称为模块。每个模块都有一个特定的编号,使用不同编号模块来实现不同的功能。
2. 网络接口层/网络访问层
2.1 网络访问层的构成
介绍:
在TCP/IP协议中,网络访问层对应OSI七层网络模型中的物理层和数据链路层。
-
对于计算机来说,物理层就是网络适配器。根据网络适配器的存在方式,可以分为两种类型,第一类是物理网络适配器:有线网卡、无线网卡等;第二类是虚拟网络适配器:宽带拨号连接、VPN连接等。
-
数据链路层划分为两个子层,第一个是介质访问控制(Media Access Control,MAC):提供与网络适配器连接的接口;第二个是逻辑链路控制(Logical Link Control,LLC):这个子层对经过子网传递的帧进行错误检查,并且管理子网上通信设备之间的链路。
2.2 网络体系
介绍:
网络体系定义了物理网络的构成,以及对应的通信协议。例如:有线网络和无线网络是两种不同的网络体系。
2.2.1 体系的构成
网络体系包含了以下四个方面:
- 访问方法:定义了计算机使用传输介质的规则。
- 数据帧格式:定义了数据传输的格式。所有要传输的数据必须按照该格式进行传输。
- 布线类型:定义了网络适配器和其他网络设备的连接方式。
- 布线规则:定义网络适配器和网络设备连接规范,如网络适配器接口类型和连线长度等。
2.2.2 类型
网络体系主要分为四大类型,每种类型及使用范围如下:
- IEEE 802.3(以太网):在大多数办公室和家庭中使用的基于线缆的网络,就是常见的有线局域网。
- IEEE 802.11(无线网络):在办公室、家庭、咖啡厅等使用的无线网络技术,如Wi-Fi网络。
- IEEE 802.16(WiMAX):用于移动通信长距离无线连接的技术。
- PPP(点到点协议):使用Modem通过电话线进行连接的技术,如通过拨号方式建立的网络连接。
2.3 物理地址
2.3.1 MAC地址格式
介绍:
采用十六进制表示,共6个字节(48位),长度位48Bit。整个地址可以分为前24位和后24位,代表不同含义。
- 前24位称为组织唯一标识符,区分了不同的厂家。
- 后24位称为扩展标识符,由厂家自己分配。
2.3.2 查询MAC厂商
介绍:
可以根据前24位标识符判断出硬件的生产厂商和生产地址。网址如下:https://mac.bmcx.com/
2.3.3 查看网络主机MAC地址信息
-
显示局域网中指定主机的MAC地址信息
netwox 5 -i 192.168.1.1
-
显示局域网中所有主机的MAC地址
netwox 5 -i 192.168.1.0/24
-
为了更好地了解当前的进度,在显示局域网中所有主机的MAC地址时,显示未发现主机的MA地址信息,进而可以查看扫描速度
netwox 5 -i 192.168.1.0/24 -u
2.3.4 根据MAC地址获取主机其他信息
-
显示该主机相关信息
netwox 4 -e 00:0C:29:CA:E4:66
-
在显示信息时只想显示IP地址信息,可以加上–ip选项
netwox 4 -e 00:0C:29:CA:E4:66 --ip
-
在显示信息时只想显示主机名信息,可以加上–host选项
netwox 4 -e 00:0C:29:CA:E4:66 --host
-
在显示信息时只想显示标题信息,可以加上–title选项
netwox 4 -e 00:0C:29:CA:E4:66 --title
2.4 以太网
2.4.1 以太网连接
- 拓扑结构——以太网结构主要分为总线型和星型两种,星型更为常用。
- 传输介质——双绞线多用于从主机到集线器获交换机的连接,而光纤则主要用于交换机间的级联和交换机到路由器间的点到点链路上。
- 工作机制——以太网采用附加冲突检测的载波侦听多路访问(CSMA/CD)机制,以太网中所有节点都可以看到网络中发送的所有信息。
当以太网中的一台主机要传输数据时,工作过程如下:
1)监听信道上是否有信号在传输。
2)若没有监听到任何信号,就传输数据。
3)传输数据时继续监听。如果发现冲突,就执行退避算法;若未发现冲突,则表示发送成功。
2.4.2 以太帧结构
-
前同步码——以太帧起始部分由前同步码和帧开始定界符组成。前同步码为7个字节,1和0交替。使它和发送端的频率相同。
-
帧开始定界符——以太帧起始部分由前同步码和帧开始定界符组成。帧开始定界符为1个字节,前六位1和0交替,最后两位为1。帧的起始符。
-
目的地址、源地址——接收帧和发送帧的网络适配器的MAC地址。
-
类型(Type)——上层协议的类型。标识数据交付给哪个协议处理。
-
数据(data)——也称为有效载荷,表示交付给上层的数据。以太网帧数据长度最小为46字节,最大为1500字节。最大值也叫最大传输单元(MTU)。
-
帧检验序列(FCS)——检测该帧是否出现差错,占四个字节。
2.4.3 构建以太帧
netwox工具中编号为32的模块提供了以太帧构建功能。
-
构建以太网数据帧
netwox 32
-
构建以太帧,设置源MAC地址为
00:0C:29:C4:8A:DE
,目的MAC地址为01:02:03:04:05:06
netwox 32 -a 00:0C:29:C4:8A:DE -b 01:02:03:04:05:06
2.4.4 以太帧洪水攻击
原理:
netwox工具提供编号为75的模块,用来实现以太帧洪水攻击功能。它可以伪造大量的以太网数据包,填满交换机的存储表,使交换机失去正确的转发功能。
执行命令如下:
netwox 75
2.5 网络配置信息
2.5.1 显示网络配置信息
为了了解当前网络的相关信息,netwox工具提供了编号为1的模块,它可以显示当前主机的网络接口信息、主机的IP地址信息,以及路由表信息。
netwox 1
2.5.2 显示网络调试信息
如果想了解更多的网络信息,netwox工具提供了编号为2的模块,用于显示网络调试信息。
netwox 2
3. 网际层和IP协议
3.1 IP地址
3.1.1 探测目标主机
-
探测局域网中所有主机的IP地址、主机名和MAC地址信息
netwox 3 -a 192.168.1.0/24
-
探测域名为
www.baidu.com
的所有主机的IP地址、主机名,以及MAC地址信息netwox 3 -a www.baidu.com
3.2 IP协议
3.2.1 IP协议包结构
介绍:
IP数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20个字节,是所有IP数据报必须具有的。
- 版本(version)——占4位,标识IP协议的版本。目前广泛使用的IP协议版本号为4,即IPv4。
- 首部长度/头长——占4位,可表示的最大十进制数值是15。
- 区分服务/服务类型(tos)——占8位,用来获得更好的服务。
- 总长度/包裹总长(totlen)——首部和数据之和,单位为字节。
- 标识(identification)——用来标识数据报,占16位。IP协议在存储器中维持一个计数器。每产生一个数据报,计数器加1,并将此值赋给标识字段。
- 标志(flag)——占3位。第一位未使用,其值为0。第二位称为DF(不分片),表示是否允许分片;取值为0时,表示允许分片;取值为1时,表示不允许分片。第三位称为MF(更多分片),表示是否还有分片正在传输;取值为0时,表示没有更多分片需要发送,或者数据包没有分片。
- 片偏移/段偏移量(offsetfrag)——占13位。当报文被分片后,该字段标记该分片在原报文中的相对位置。
- 生存时间(TTL)——表示数据包在网络中的寿命,占8位。路由器在转发数据报之前,先把TTL值减1,若TTL值减少到0,则丢弃这个数据报。TTL的最大值位255。
- 协议/协议代码——表示该数据报文所携带的数据所使用协议类型,占8位。TCP的协议号为6,UDP的协议号为17,ICMP的协议号为1。
- 首部检验和/头校验和(checksum)——用于校验数据包的首部,占16位。
- 源地址——表示数据报的源IP地址。
- 目的地址——表示数据报的目的IP地址。
3.2.2 构造IP数据包
介绍:
netwox工具提供编号为38的模块,用来构造IP数据包。用户可以指定首部的字段。
-
不指定选项,直接运行该模块
netwox 38
-
指定源IP地址为
192.186.59.132
,目的IP地址为192.168.12.101
netwox 38 -l 192.168.59.132 -m 192.168.12.101
拓展:
netwox工具提供了编号为34的模块,用于指定IP数据报的以太层字段信息。
-
不指定选项,直接运行该模块
netwox 34
-
指定以太网的源MAC地址
00:0C:29:C4:8A:DE
和目的MAC地址00:0C:29:D0:21:23
netwox 34 -a 00:0C:29:C4:8A:DE -b 00:0C:29:D0:21:23
3.2.3 利用分片实施洪水攻击
介绍:
IP协议在传输数据包时,经常会进行分片传输。如果发送大量无效的IP分片包,会造成洪水攻击。用户可以使用netwox工具中编号为74的模块实施洪水攻击。
-
已知目标主机IP地址为
192.168.59.135
,使用netwox工具向目标主机发送大量的IP分片实施洪水攻击netwox 74 -i 192.168.59.135
4. ARP协议
4.1 ARP缓存
4.1.1 查看ARP缓存
-
使用arp命令查看当前主机缓存信息
arp -a
4.2 ARP协议包结构
4.2.1 ARP协议包结构
介绍:
ARP协议包主要分为ARP请求包和ARP响应包。ARP报文总长度为28字节,MAC地址长度为6字节,IP地址长度为4字节。
- 硬件类型——指明了发送方想知道的硬件接口类型,以太网的值为1。
- 协议类型——表示要映射的协议地址类型。IP协议的值为0x0800。
- 硬件地址长度和协议长度——分别指出硬件地址和协议的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
- 操作类型——用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4。
4.2.2 构造ARP包
介绍:
用户可以自己构造ARP包,向目标主机发送请求,从而获取目标主机的MAC地址。这时,可以使用netwox工具提供的编号为33的模块。
-
查看netwox所在主机默认的ARP包的相关信息
netwox 33
-
构造ARP请求包,请求目标主机
192.168.12.102
netwox 192.168.12.102
4.2.3 伪造ARP响应
介绍:
伪造ARP响应是指伪造一个不存在的主机的ARP响应。例如,黑客在攻击局域网中的主机时,会扫描局域网中的所有主机,然后对发现的主机实施攻击。如果伪造了ARP响应包,会误导黑客以为扫描到的主机是存在的,从而起到了迷惑作用。
命令:
arping,用来向局域网内的其它主机发送ARP请求的指令,它可以用来测试局域网内的某个IP是否已被使用。
-
在防御机上伪造ARP响应,创建虚拟主机
192.168.59.136
,设置其MAC地址为A1:B2:C3:D4:E5:F6
netwox 73 -i 192.168.59.136 -e A1:B2:C3:D4:E5:F6
-
在攻击机上使用arping命令,会扫描到目标主机存活,从而迷惑攻击者
arping 192.168.59.136
4.3 免费ARP包
介绍:
免费ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的MAC地址,而是当主机启动的时候,发送一个Gratuitous ARP请求,即请求自己的IP地址的MAC地址。
4.3.1 免费ARP包结构
免费ARP报文与普通ARP报文的区别在于报文中的目标IP地址。普通ARP报文的目标IP地址是其他主机的IP地址;而免费ARP报文的目标地址是自己的IP地址。
4.3.2 免费ARP的作用
- 该类型报文起到一个宣告作用。
- 可用于检测IP地址冲突。
- 可用于更新其他主机的ARP缓存表。
4.3.3 构造免费ARP包
-
设置源IP地址和目标IP地址为
192.168.59.132
netwox 33 -g 192.168.59.132 -i 192.168.59.132
5. ICMP协议
5.1 ICMP协议概述
5.1.1 ICMP协议作用
介绍:
数据包在发送到目标主机的过程中,通常会经过一个或多个路由器。而数据包在通过这些路由惊醒传输时,可能会遇到各种问题,导致数据包无法发送到目标主机上。为了了解数据包在传输的过程中在哪个环节出现了问题,就需要用到ICMP协议。它可以跟踪消息,把问题反馈给源主机。
5.1.2 ICMP报文结构
介绍:
ICMP报文一般为8个字节,包括类型、代码、校验和和扩展内容字段。
- 类型——表示ICMP的消息类型。
- 代码——表示对类型的进一步说明。
- 校验和——表示对整个报文的报文信息的校验。
常见的类型和代码的ICMP含义如下表所示。
类型 | 代码 | 含义 |
---|---|---|
0 | 0 | 回显应答(ping 应答) |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
3 | 4 | 需要进行分片,但设置不分片位 |
3 | 5 | 源站选路失败 |
3 | 6 | 目的网络未知 |
3 | 7 | 目的主机未知 |
3 | 9 | 目的网络被强制禁止 |
3 | 10 | 目的主机被强制禁止 |
3 | 11 | 由于服务类型 TOS,网络不可达 |
3 | 12 | 由于服务类型 TOS,主机不可达 |
3 | 13 | 由于过滤,通信被强制禁止 |
3 | 14 | 主机越权 |
3 | 15 | 优先中止失效 |
4 | 0 | 源端被关闭(基本流控制) |
5 | 0 | 对网络重定向 |
5 | 1 | 对主机重定向 |
5 | 2 | 对服务类型和网络重定向 |
5 | 3 | 对服务类型和主机重定向 |
8 | 0 | 回显请求(ping 请求) |
9 | 0 | 路由器通告 |
10 | 0 | 路由器请求 |
11 | 0 | 传输期间生存时间为 0 |
11 | 1 | 在数据报组装期间生存时间为 0 |
12 | 0 | 坏的 IP 首部 |
12 | 1 | 缺少必需的选项 |
13 | 0 | 时间戳请求 |
14 | 0 | 时间戳应答 |
17 | 0 | 地址掩码请求 |
18 | 0 | ###地址掩码应答 |
5.2 ICMP协议应用——探测主机
5.2.1 使用Ping命令
介绍:
ping命令就是借助ICMP传输协议,发出要求回应的Echo request消息。若远端主机的网络功能没有问题,就会回应Echo reply信息,因而得知该主机运行正常。因此用户可以通过ping命令来判断目标主机是否启用。
5.2.2 构造ICMP数据包
介绍:
ICMP协议可以用来对目标主机发送ICMP数据包,判断目标主机是否启用。正常情况下,ICMP请求报文中的类型值为8,代码值为0;ICMP响应报文中的类型值为0,代码值为0。用户可以使用netwox工具的编号65的模块构造ICMP数据包,并对目标主机进行扫描。
-
构造ICMP数据包,判断目标主机
192.168.59.135
是否启用netwox 65 -i 192.168.59.135
-
伪造IP地址为
192.168.59.140
,MAC地址为00:0C:29:CA:E4:99
netwox 65 -i 192.168.59.135 -E 00:0C:29:CA:E4:99 -I 192.168.59.140
-
netwox工具提供了编号为49的模块用于持续构造ICMP数据包
netwox 49 -i 192.168.59.135
-
netwox工具提供了编号为50的模块伪造连续的ICMP数据包。指定目标主机的IP地址为
192.168.59.135
、目标主机的MAC地址为00:0C:29:CA:E4:66
,伪造实施主机的IP地址为192.168.59.150
、MAC地址为AA:BB:CC:11:22:33
netwox 50 -i 192.168.59.135 -e 00:0C:29:CA:E4:66 -I 192.168.59.150 -E AA:BB:CC:11:22:33