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

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

您可以更改任何IP数据包的源地址。 这就是所谓的“欺骗”。

但是,对于TCP而言,这并不会对您有所帮助:TCP不是面向数据报的协议,而是面向数据stream的协议。 这意味着它被devise为透明地使用离散的数据包来模拟面向stream的通信信道。 为了做到这一点,它将重组数据包形成一个stream,但也有内置的机制,从丢包和不正确的数据包到达恢复。 它还具有处理连接状态pipe理的机制。

这就意味着,在向TCP服务器发送“请求”之前,首先需要build立一个请求,并要求客户端和服务器执行三次握手:在客户端和服务器之间进行协商,以确保两端的连接同意打开连接。 在协商过程中,客户端和服务器都会select一个随机的序列号,这个序列号必须被另一个对端使用。

对于连接一端发送的每个数据包,这个数字会增加一个,用来检查数据包是否被丢弃或者以不正确的顺序接收。

既然你不能得到你的第一个SYN数据包(TCP握手中的第一个数据包)的答案,并且你需要知道该答复中包含的序列号,才能确定连接并开始发送数据,只是在TCP连接中欺骗源IP。

现在,如果你在服务器和欺骗客户端之间的某个地方,你可以把答案弄清楚(即使这不是你的意思),使用适当的序列号确定连接并发送你的请求(你可以甚至读取答案,但是这需要你连接到客户端和欺骗服务器之间的一个段,并且能够在数据包通过段时读取这些数据包,这种情况在实际中很难实现在最后一段之外,甚至需要使用特殊的硬件(一个可以使用端口作为“监控”端口的交换机),或者在交换机上使用ARP中毒,这并不是很简单,而且仍然只允许恶搞在您的本地部分的机器。