gpt4 book ai didi

Linux 端口转发到 Socks 代理

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:59 27 4
gpt4 key购买 nike

我阅读了有关 Raspberry Pi 项目的教程。简而言之,该项目包含一个 TOR 中间盒 AP,它通过以太网接口(interface)连接到互联网,客户端可以通过它的 WiFi 接口(interface)连接到树莓派 WLAN 网络。使用 iptables 端口转发命令将进入 WiFi 接口(interface)的所有流量重定向到本地 TOR SOCKS 代理。

sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040

现在我的问题是,TOR socks 代理如何知道应用程序请求的真实套接字目标端口?例如,假设我使用 firefox 打开 stackvoerflow.com。 Firefox 向 stackoverlfowIP:80 发出请求......但 iptables 将请求路由到 localhost:9050,应用程序是否知道中间有一个 SOCKS 代理(假设浏览器设置中未设置代理设置)?如果目标端口已被 iptables 从 80 更改为 9050,TOR 本地 SOCKS 代理如何知道真正的目标端口?

最佳答案

有一个内核 API(getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, (struct sockaddr*) &orig_addr, sizeof(orig_addr)))可供代理知道实际请求的目的地。

A simple example daemon there (网站消失了,使用 Wayback Machine):

[...]

        while (1) {
int fd = CHECK(accept(listenfd,NULL, NULL), != -1);
if (!fork()) {
struct sockaddr_in trgaddr;
size_t trgaddr_len = sizeof(trgaddr);
CHECK(getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, (struct sockaddr*)&trgaddr, &trgaddr_len), != -1);
printf("Connection to port %d.\n", ntohs(trgaddr.sin_port));
tcp_tunnel(fd, ntohs(trgaddr.sin_port));
return 0;
} else
close(fd);
}

[...]

顺便说一句,有一个新的 TPROXY 目标方法比 REDIRECT 更强大(双向透明),但需要额外的设置(--tproxy-mark 然后 ip 需要规则 fwmark ... 并且代理现在使用 setsockopt(fd, SOL_IP, IP_TRANSPARENT, &flag, sizeof(flag)) 然后使用比 REDIRECT 更标准的方法)。 TOR 不需要,但新应用程序可能不再使用 REDIRECT。

TPROXY example

关于Linux 端口转发到 Socks 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47951387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com