9

我正在编写一个通用的应用程序代理。

我想将其用作透明代理,我最初的计划是使用带有 REDIRECT 规则的 iptables 将所有连接转发到我的应用程序代理。

这里的问题当然是,我的应用程序代理丢失了有关预期目的地的信息。

是否可以查询 iptables 以检索最初预期的收件人?对此问题的任何其他可能的解决方案也表示赞赏!

4

1 回答 1

16

也许这就是你要找的东西?

http://www.network-builders.com/iptables-redirect-original-destination-ip-t69515.html

读取SO_ORIGINAL_DSTTCP 套接字的选项。
或者在 /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 的东西。

于 2011-07-02T01:45:01.720 回答