我不是说getsockname返回的是本地接口的地址,我的意思是底层ip数据包中的目标ip(有两种情况不相同,例如在透明代理方案中)。 / p>
我不想使用原始套接字来做到这一点......
所以我想知道是否有一些聪明的技巧来找出数据包中出现的目标IP ...
提前致谢。
答案 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来实现其功能的。