如何更改 tcp 数据包的源地址?

如何更改 tcp 数据包的源地址?

是否可以更改任何 TCP 数据包的源地址?我知道如果我更改地址,我将不会收到这些数据包,我只需要向服务器发出请求。这怎么可能呢?

答案1

你可以改变任何 IP 数据包的源地址。这称为“欺骗”。

然而,对于 TCP 来说,这不会对你有帮助:TCP 不是面向数据报的协议,而是面向流的协议。实际上,这意味着它被设计为使用离散数据包透明地模拟面向流的通信通道。为了做到这一点,它会将数据包重新组合在一起以形成一个流,但也有内置机制来从数据包丢失和错误数据包到达中恢复。它还有处理连接状态管理的机制。

所有这些意味着,在向 TCP 服务器发送“请求”之前,您必须先建立连接,这将要求客户端和服务器执行三次握手:客户端和服务器之间的协商,以确保连接的两端都同意打开连接。在该协商期间,客户端和服务器都将选择一个随机序列号,另一方必须使用该序列号。

然后,对于连接一端发送的每个数据包,该数字都会增加一,并用于检查数据包是否被丢弃或以错误的顺序接收。

由于您不会收到第一个 SYN 数据包(TCP 握手中的第一个数据包)的答复,并且您需要知道该答复中包含的序列号才能完成连接并开始发送数据,因此您不能仅仅欺骗 TCP 连接中的源 IP。

现在,如果您位于服务器和被欺骗的客户端之间的某个路径上,您可以强行给出答案(即使答案不是给您的),使用正确的序列号完成连接并发送您的请求(您甚至可以读取答案)。但是,这将要求您连接到客户端和被欺骗的服务器之间的一个段,并且能够在数据包通过该段时读取它们。在实践中,这种情况在最终段之外很难实现,即使这样,您也需要使用特殊硬件(可以使用端口作为“监控”端口的交换机)或在交换机上使用 ARP 中毒。这并不是一件容易的事,而且仍然只允许您在本地段上欺骗一台机器。

相关内容