Ich versuche, einen transparenten Proxy in C++ zu implementieren, der ausgehende tcp-Verbindungen mit bestimmten Ports überwacht und sie bei Bedarf weiterleitet oder blockiert.So verfolgen Sie die ursprüngliche Zieladresse im transparenten Proxy
Ich habe eine Regel weiterleiten Anruf an Port 9002 Port auf localhost bestimmt definiert 9001:
sudo iptables -t nat -A OUTPUT -p tcp --dport 9002 -j DNAT --to-destination 127.0.0.1:9001
jetzt, wenn vom Client zum Server versucht, eine Verbindung (die auch in demselben Host ausgeführt wird) mit
./client 127.0.0.1 9002
Der Anruf wird an den Port 9001 weitergeleitet und die Anwendung, die den Port 9001 überwacht, erhält die Verbindung ordnungsgemäß. Meine Frage ist, wie die Anwendung, die auf Port 9001 läuft, wissen kann, dass dieser Anruf zu seinem ursprünglichen Bestimmungsort127.0.0.1:9002
geschickt werden muss, nachdem es damit fertig ist? Versuchte Aufruf getsockname auf akzeptiert Steckdose nach Anwendung lauscht auf Port 9001
:
struct sockaddr_in sockaddr;
socklen_t len = sizeof(sockaddr);
getsockname(socketfd, (struct sockaddr *) &sockaddr, &len);
aber diese Rückkehr 127.0.0.1:44853
das ist nicht das, was ich wollte.