收件人打开邮件时,如何获取收件人的IP地址和位置?

时间:2018-09-18 13:53:34

标签: c#

当客户端打开我的邮件时,如何获取客户端ip和地址?我尝试过:

 var ip = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
 IpInfo ipInfo = new IpInfo();
 string info = new WebClient().DownloadString("http://ipinfo.io/" + ip);
 ipInfo = JsonConvert.DeserializeObject<IpInfo>(info);
 RegionInfo myRI1 = new RegionInfo(ipInfo.Country);
 obj.country = myRI1.EnglishName;
 obj.countryCode = myRI1.ThreeLetterISORegionName;
 obj.state = ipInfo.Region;
 obj.city = ipInfo.City;
 obj.ip = ipInfo.Ip;

但这会返回我的主机服务器地址

2 个答案:

答案 0 :(得分:0)

为解决您的问题,您可以添加以下代码:

obj.ServicePoint.BindIPEndPointDelegate = new System.Net.BindIPEndPoint(BindIPEndPointCallback);

答案 1 :(得分:0)

如果此代码位于Web服务中,则可能是您的应用程序在自身与服务之间创建代理而不是将其直接连接到浏览器时遇到了问题。

[Browser] ---> [ASP.NET App / Proxy] ---> [Web Service]

这将解释为什么服务始终将服务器的IP地址视为客户端,因为从Web服务的角度来看,ASP.NET应用程序是它的“客户端”。

在这种情况下,您将需要在应用程序层收集客户端IP地址并将其传递给Web服务。

               Collect IP Address Here
                        |
                        V
[Browser] ---> [ASP.NET App / Proxy] ---> [Web Service]
                                      ^
                                      |
                              Pass IP to web Service