我正在编写一个通用的应用程序代理。
我想将其用作透明代理,我最初的计划是使用带有 REDIRECT 规则的 iptables 将所有连接转发到我的应用程序代理。
这里的问题当然是,我的应用程序代理丢失了有关预期目的地的信息。
是否可以查询 iptables 以检索最初预期的收件人?对此问题的任何其他可能的解决方案也表示赞赏!
也许这就是你要找的东西?
http://www.network-builders.com/iptables-redirect-original-destination-ip-t69515.html
读取
SO_ORIGINAL_DST
TCP 套接字的选项。
或者在 /proc/net/ip_conntrack 中查找连接跟踪表。
#include <linux/netfilter_ipv4.h>
struct sockaddr_in addr;
socklen_t addr_sz = sizeof(addr);
memset(&addr, 0, addr_sz);
addr.sin_family = AF_INET;
getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, &addr, &addr_sz);
我认为您应该能够将其转换为类似于 python 的东西。