我想讓我的服務器從連接的TCP套接字中確定客戶端的源IP和端口。由於我的客戶可能支持NAT,所以我不能依賴客戶(在連接的協議中)告訴我......如果這是可能的,我將需要在Windows和Linux上實現它。 ..但任何一個答案都可以幫助我開始...你能確定連接的TCP套接字的源IP和端口嗎?
我使用C,我正在尋找基於libc或msvcrt的解決方案。
我想讓我的服務器從連接的TCP套接字中確定客戶端的源IP和端口。由於我的客戶可能支持NAT,所以我不能依賴客戶(在連接的協議中)告訴我......如果這是可能的,我將需要在Windows和Linux上實現它。 ..但任何一個答案都可以幫助我開始...你能確定連接的TCP套接字的源IP和端口嗎?
我使用C,我正在尋找基於libc或msvcrt的解決方案。
都應該在Linux和Windows工作:
struct sockaddr_in addr;
socklen_t len;
len = sizeof addr;
getpeername(clientSocket, (struct sockaddr*)&addr, &len);
printf("Remote IP address: %s\n", inet_ntoa(addr.sin_addr));
如果對等的NAT後面,你可以談論兩個不同的IP地址(這是從你的問題不清楚你想要哪一個):
在前一種情況下的外部IP,沒有可用的解決方案從TCP/IP堆棧:此信息只是沒有你的主機上存在那裏,因爲NAT替換所有內部IP爲每個數據包使用自己的IP。所以唯一的解決方案就是在你的協議中支持這個功能。
在後一種情況下,您可以問TCP/IP協議棧:getpeername()是您如何做到的。
可能複製? http://stackoverflow.com/questions/4186118/recovering-ip-port-from-socket-descriptor – 2011-06-09 20:14:53