透明なSOCKSプロキシはどのIPアドレスを使用するのかをどのように知ることができますか?

透明なSOCKSプロキシはどのIPアドレスを使用するのかをどのように知ることができますか?

私が知る限り、発信TCP接続の透過的なプロキシをサポートする2つのSOCKSプロキシがあります。トルそしてレッドソックス。 HTTPプロキシとは異なり、これらのSOCKSプロキシは透過的にプロキシを使用できます。どの暗号化されたプロトコル、メタデータやヘッダーのないプロトコルを含む発信TCP接続。

両方のプロキシが発信 TCP トラフィックをプロキシのローカルポートにリダイレクトするには、NAT が必要です。たとえば、TransPort 9040ローカルコンピュータでTorを実行している場合は、次のiptablesルールを追加する必要があります。

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

127.0.0.1私が知っている限り、これは元の宛先IPとポートを次に置き換えるので、9040これは暗号化されたストリーム(SSHなど)またはヘッダーのないストリーム(例:誰ですか?)、プロキシは元の宛先IPとポートをどのように知っていますか?

ベストアンサー1

ここ実行方法:

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

おすすめ記事