0
我試圖在C++中實現一個透明代理,它將監視與某些端口的傳出tcp連接,並根據需要轉發或阻止它們。如何跟蹤透明代理中的原始目標地址
我已經定義了一個規則來轉發呼叫目標端口9002到本地主機端口9001:
sudo iptables -t nat -A OUTPUT -p tcp --dport 9002 -j DNAT --to-destination 127.0.0.1:9001
現在
當客戶端嘗試與
連接到服務器(這也是在同一臺主機上運行)./client 127.0.0.1 9002
該呼叫被轉發到端口9001,並且偵聽端口9001的應用程序正確地獲得連接。我的問題是運行在端口9001上的應用程序如何知道這個調用在完成之後需要發送到它的原始目標127.0.0.1:9002
?在接受的套接字打過電話getsockname在應用偵聽端口9001
:
struct sockaddr_in sockaddr;
socklen_t len = sizeof(sockaddr);
getsockname(socketfd, (struct sockaddr *) &sockaddr, &len);
但這種回報127.0.0.1:44853
這不是我想要的東西。