我正在使用TcpClient在端口上偵聽請求。當請求從客戶端進入時,我想知道發出請求的客戶端IP。如何使用TcpClient獲取客戶端IP地址?
我已經試過:
Console.WriteLine(tcpClient.Client.RemoteEndPoint.ToString());
Console.WriteLine(tcpClient.Client.LocalEndPoint.ToString());
var networkStream = tcpClient.GetStream();
var pi = networkStream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance);
var socketIp = ((Socket)pi.GetValue(networkStream, null)).RemoteEndPoint.ToString();
Console.WriteLine(socketIp);
所有這一切都是私有地址,顯然不是的客戶端的地址把我的網絡發出請求這些地址輸出10.x.x.x地址。我能做些什麼來獲得提出請求的客戶的公共IP?
編輯: 我們正在使用帶有tcp轉發的Amazon EC2負載均衡器。有沒有辦法在這個設置中獲得真正的客戶端IP?
你怎麼能確定地址是「明確」不是你的網絡客戶端的地址。你至少知道你的客戶所在的IP範圍?他們是否居住在您的內部網絡中,他們是否居住在公共互聯網? – 2010-04-27 03:58:58
因爲它們都從10開始。 - 這表示私有IP範圍不是公共IP地址。 http://en.wikipedia.org/wiki/Private_network – brendan 2010-04-27 04:21:24