当使用raw sockets
发送TCP
数据时,允许将source ip address
置零,这样内核就可以正确的值。这很有用,尤其是在使用多个接口(interface)(具有不同的 IP
地址)时。
我现在的问题是:要计算 TCP
校验和,我需要知道源 IP 地址最终是什么。这对我来说似乎是不可能的?
有没有办法确定我的传出数据包的源IP
?
(另一种方法是,将我的原始套接字专门绑定(bind)到一个地址,但我不想那样做)。
/编辑:使用 Linux
最佳答案
如果您不绑定(bind)套接字,内核必须根据目标地址找到源地址。
基本上完成路由查找并确定目标接口(interface)。之后,从该接口(interface)获取 IP:数据包的来源。
所以你的问题变成了执行路由查找,就像 ip route get
那样。
编辑
@nos 提到使用不同的套接字 (UDP) 并将其连接到该目标地址。使用 getsockname
获取它的本地绑定(bind)名称应该会为您提供将用于该目的地的源地址。
关于C - TCP 校验和(使用原始套接字)——如何获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524868/