【问题标题】:Getting requesting client's IP address on server在服务器上获取请求客户端的 IP 地址
【发布时间】:2014-11-12 14:06:41
【问题描述】:

我有一个 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");
        }));
        }

【问题讨论】:

  • 客户端 DNS 名称为 context.Request.UserHostName;。但看起来你已经编写了正确的代码。 clientName 是否被某处覆盖?在第一个代码片段之后添加 Debug.WriteLine("client is: " + clientName); 时会显示什么(确保没有任何内容被覆盖)?
  • context.Request.RemoteEndPoint.ToString()); 显示的是什么?;
  • @Sjips Using RemoteEndPoint.ToString() 向我展示了我想要的东西。我不敢相信我错过了那个。谢谢!

标签: c# httplistener


【解决方案1】:

尝试使用:

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

【讨论】:

  • 想解释一下您的解决方案吗?
  • 如果在代理或ip转发之后,这通常是代理地址,而不是客户端地址
【解决方案2】:

来自 HttpListenerRequest.UserHostAddress 属性的 MSDN 文档:

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

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

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

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

【讨论】:

  • 在使用RemoteEndPoint 时,我不应该只说string clientName = Dns.GetHostEntry(clientIp).ToString(); 来获取clientIp 的域名吗?我只是得到“没有这样的主机是已知的”
  • IPHostEntry 不会覆盖ToString(),所以大概你的意思是别的东西(例如HostName 属性)。但无论如何,是的……这通常会奏效。但是不,你不能假设它会总是工作。您必须处理 DNS 服务器知道的 IP 地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2021-05-14
  • 2020-07-11
相关资源
最近更新 更多