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