使用raw sockets
发送TCP
数据时,允许保留source ip address
零,以便内核输入正确的值。这很有用,尤其是当使用多个接口(具有不同的IP
地址)时。
我现在的问题是:要计算到TCP
校验和,我需要知道源IP地址到底是什么。这对我来说似乎不可能?
是否有确定传出数据包的来源IP
?
(另一种方法是,将我的原始套接字专门绑定到一个地址,但我不想这样做。)
/ edit:使用Linux
答案 0 :(得分:1)
如果您没有绑定套接字,内核必须根据目标地址找到源地址。
基本上完成路由查找并确定目标接口。之后,IP从该接口获取:数据包的来源。
所以你的问题转变为执行路线查找,就像ip route get
那样。
@nos提到使用不同的套接字(UDP)并将其连接到该目标地址。使用getsockname
获取本地绑定名称应该为您提供将用于该目标的源地址。