C# 获取请求客户端';服务器上的IP地址

C# 获取请求客户端';服务器上的IP地址,c#,httplistener,C#,Httplistener,我有一个HttpListener,我对能够看到请求客户端的IP地址感兴趣。一个额外的好处是能够看到客户端的DNS,但我不确定这怎么可能,因为据我所知,信息不是通过HTTP发送的 无论如何,据我所知,我应该能够使用Request.UserHostAddress来实现这一点,但我只是获取我的本地IP地址。我做错了什么 我应该在哪里获得客户端IP HttpListenerContext context = listener.EndGetContext(result);

我有一个HttpListener,我对能够看到请求客户端的IP地址感兴趣。一个额外的好处是能够看到客户端的DNS,但我不确定这怎么可能,因为据我所知,信息不是通过HTTP发送的

无论如何,据我所知,我应该能够使用
Request.UserHostAddress
来实现这一点,但我只是获取我的本地IP地址。我做错了什么

我应该在哪里获得客户端IP

        HttpListenerContext context = listener.EndGetContext(result);
        string clientName = context.Request.UserHostAddress;
我在服务器输出列表框中写下:

        public static void TileString(int x, int y, int z, string dbName, string clientName)
        {
        int[] tileInts = { z, x, y };
        string tileString = string.Join("/", tileInts);

        Application.Current.Dispatcher.Invoke(new Action(() =>
        {
            var mainWindow = Application.Current.MainWindow as MainWindow;
            mainWindow.AppendServerOutput("Delivering tile " + tileString + " in format [z, x, y]" + " from " + dbName + " to client " + clientName + "\n");
        }));
        }
尝试使用:

string clientIP = context.Request.RemoteEndPoint.ToString());

从财产的MSDN文档中:

获取请求指向的服务器IP地址和端口号

换句话说,它不是远程端点的地址。它是远程端点使用的服务器的地址

如您所见,您可以使用
RemoteEndPoint
检索远程端点的IP地址


使用
System.Net.Dns.GetHostEntry()
方法进行反向Dns查找(即检索IP地址的远程主机名)。

客户端Dns名称为
context.Request.UserHostName。但看起来您编写了正确的代码。clientName是否被覆盖了?添加
Debug.WriteLine(“客户机是:”+clientName)时显示的内容和什么是
context.Request.RemoteEndPoint.ToString()显示@使用RemoteEndPoint.ToString()的Sjips向我展示了我想要的东西。我真不敢相信我错过了那个。谢谢想解释一下您的解决方案吗?如果在代理或ip转发之后,这通常是代理地址,而不是使用
RemoteEndPoint
时的客户端地址。我是否应该说
string clientName=Dns.GetHostEntry(clientIp).ToString()
获取clientIp的域名?我只知道“没有这样的主机是已知的”
IPHostEntry
不会覆盖
ToString()
,因此您可能是指其他内容(例如
HostName
属性)。但无论如何,是的……这通常会奏效。但是不,你不能假设它总是有效的。您必须处理DNS服务器知道的IP地址。