在原始套接字中填充源IP地址以获取有效响应

时间:2013-11-16 15:55:41

标签: c++ sockets tcp raw-sockets

我正在使用c / c ++进行一些基本的网络编程。我想要做的是创建包含填充了我自己的值(而不是内核)的头文件包,将数据包发送到某个服务器并获得响应。我能够创建tcp / ip头结构并填充seq_num等字段。例如,我会在某个端口向主机发送SYN数据包,并检查主机是否以有效的SYN_ACK响应。

我想知道需要为ip / tcp标头中的source_address和source_port字段添加什么才能得到有效的响应。使用本地地址(127.0.0.1)将无法正常工作,导致目标计算机无法发送响应。

我只能使用raw_sockets,不能使用SOCK_STREAM等。使用Linux OS。

1 个答案:

答案 0 :(得分:1)

源IP地址应该是您期望数据包到达目的地的接口的IP地址。为了简化操作,源端口可以是计算机上的任何空闲端口。

此外,你需要再照顾一件事。一旦你获得了syn-ack,它也将由你的机器的tcp堆栈处理,并且tcp堆栈将发送一个重置以响应该syn-ack。如果你在Linux上,你可以使用iptables来取消重置。

-MS