我不是指什么getsockname返回,这是本地接口的地址,我的意思是在底层IP数据包中的目标IP(有些情况下,这两个不相等,例如在透明代理场景中)。我如何从tcp套接字得到目标ip,并且接受?
我不想使用原始套接字来做到这一点...
所以我想知道,如果有一些聪明的技巧,找出出现在包中的目的IP ...
提前致谢。
我不是指什么getsockname返回,这是本地接口的地址,我的意思是在底层IP数据包中的目标IP(有些情况下,这两个不相等,例如在透明代理场景中)。我如何从tcp套接字得到目标ip,并且接受?
我不想使用原始套接字来做到这一点...
所以我想知道,如果有一些聪明的技巧,找出出现在包中的目的IP ...
提前致谢。
getsockname()
返回SYN的目标IP地址。由于weak end system model(也讨论了here),这可能是也可能不是通过其接收SYN的NIC的地址。
我只是找到了答案,我的问题,选项SO_ORIGINAL_DST:
getsockopt(socket, SOL_IP, SO_ORIGINAL_DST, &destAddr, &destAddrLen);
希望这可以帮助别人那里!
不需要。这在存在NAT设备的情况下检索原始目标*。与您要求的不同。 – EJP