2

ポート 50 からのすべてのトラフィックを 5050 にリダイレクトしました。

iptables -t nat -A POSTROUTING -p udp --dport 50 -j REDIRECT --to-port 5050

5050 で RAW ソケットを使用してリッスンすると、0.0.0.0:50 から 0.0.0.0:5050 までの IP パケットが表示されます。これはポート 50 からポート 5050 への別のリダイレクト パケットのように見えるため、元の宛先アドレスは明らかに存在しません。

元のパケットが abcd:50 に送信されるはずだった場合、どうすればその IP アドレスを取得できますか? メッセージをそこに転送できるように、メッセージの送信先アドレスを特定するにはどうすればよいですか?

私はあなたの助けに感謝します。

PS: libipq は使用したくありません。何らかの理由で機能しなかったため、機能させるためにこれ以上時間を無駄にしたくないからです。

4

1 に答える 1

3

Linux netfilter は、 で呼び出されるソケット オプションを定義しSO_ORIGINAL_DSTます<linux/netfilter_ipv4.h>

まず、次のコマンドのいずれかを使用して、システムでポート転送を有効にする必要があります。

sysctl net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward

次に、これを使用できます:

struct sockaddr_in addr;
socklen_t addr_sz = sizeof(addr);
getsockopt(fd, IPPROTO_IP, SO_ORIGINAL_DST, &addr, &addr_sz);

SO_ORIGINAL_DSTどの Linux マンページにも見つかりません。netfilter サイトで正式なドキュメントを見つけることができるかもしれません。

于 2010-10-16T23:38:09.137 に答える