C - TCP校验和(使用原始套接字) - 如何获取IP地址

时间:2011-06-29 17:35:02

标签: c sockets tcp checksum

使用raw sockets发送TCP数据时,允许保留source ip address零,以便内核输入正确的值。这很有用,尤其是当使用多个接口(具有不同的IP地址)时。

我现在的问题是:要计算到TCP校验和,我需要知道源IP地址到底是什么。这对我来说似乎不可能?

是否有确定传出数据包的来源IP

(另一种方法是,将我的原始套接字专门绑定到一个地址,但我不想这样做。)

/ edit:使用Linux

1 个答案:

答案 0 :(得分:1)

如果您没有绑定套接字,内核必须根据目标地址找到源地址。

基本上完成路由查找并确定目标接口。之后,IP从该接口获取:数据包的来源。

所以你的问题转变为执行路线查找,就像ip route get那样。

修改

@nos提到使用不同的套接字(UDP)并将其连接到该目标地址。使用getsockname获取本地绑定名称应该为您提供将用于该目标的源地址。