如何从接受产生的tcp套接字获取目标IP?

时间:2015-01-16 11:46:39

标签: sockets network-programming

我不是说getsockname返回的是本地接口的地址,我的意思是底层ip数据包中的目标ip(有两种情况不相同,例如在透明代理方案中)。 / p>

我不想使用原始套接字来做到这一点......

所以我想知道是否有一些聪明的技巧来找出数据包中出现的目标IP ...

提前致谢。

3 个答案:

答案 0 :(得分:1)

getsockname()返回SYN的目标IP地址。由于weak end system model(也讨论了here),可能是也可能不是通过其接收SYN的NIC的地址。

答案 1 :(得分:0)

我刚刚找到了问题的答案,选项SO_ORIGINAL_DST:

 getsockopt(socket, SOL_IP, SO_ORIGINAL_DST, &destAddr, &destAddrLen);

希望这可以帮助那边的人!

答案 2 :(得分:0)

@user2369060 的回答是正确的。在实践中,Envoy确实是使用SO_ORIGINAL_DST来获取原始ip来实现其功能的。