투명한 SOCKS 프록시는 어떤 대상 IP를 사용해야하는지 어떻게 알 수 있습니까? 프록시 투명

나가는 TCP 연결에 대해 투명한 프록시를 지원하는 Torredsocks 라는 두 가지 SOCKS 프록시가 있습니다. HTTP 프록시와는 달리,이 SOCKS 프록시 투명 프록시 할 수 있는 메타 데이터 또는 헤더없이 암호화 프로토콜과 프로토콜을 포함하여 나가는 TCP 연결.

이 두 프록시는 나가는 TCP 트래픽을 프록시의 로컬 포트로 리디렉션하기 위해 NAT를 사용해야합니다. 예를 들어 TransPort 9040로컬 컴퓨터 에서 Tor를 사용하는 경우 다음과 같이 iptables 규칙을 추가해야합니다.

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040

내 지식으로는 이것이 원래 대상 IP와 포트를 127.0.0.1and로 대체하여 9040이것이 SSH와 같은 암호화 된 스트림이거나 헤더가없는 것 ( whois 등 )이라면 프록시는 원래 대상 IP와 포트를 어떻게 알 수 있습니까?



답변

방법은 다음과 같습니다 .

static int getdestaddr_iptables(int fd, const struct sockaddr_in *client, const struct sockaddr_in *bindaddr, struct sockaddr_in *destaddr)
{
        socklen_t socklen = sizeof(*destaddr);
        int error;

        error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen);
        if (error) {
                log_errno(LOG_WARNING, "getsockopt");
                return -1;
        }
        return 0;
}

iptables는 원래 대상 주소를 덮어 쓰지만 이전 주소를 기억합니다. 그런 다음 응용 프로그램 코드는 특수 소켓 옵션을 요청하여이를 가져올 수 있습니다 SO_ORIGINAL_DST.


답변