获取出口ip or api获取请求者ip

艾玛,这两天为了整这个ip 真的可谓无所不用其极。 在网上查阅了各种资料,其实我想实现的功能很简单 就像百度 直接看到自己的出口ip 奈何查了许多资料,都没有适合的解决办法。 灵机一动,我是不是可以访问百度的api呢? 于是点击了上面的Ip地址查询,跳转到了 http://www.ip138.com/ 然后我试着在显示Ip的地方,查看元素 惊喜来了 原来它是套了一个iframe 把 iframe 的地址那出来 http://2018.ip138.com/ic.asp 直接返回ip地址和所在地。 接着对返回数据进行解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public static string getExternalIp() { try { WebClient client = new WebClient(); client.Encoding = System.Text.Encoding.Default; string response = client.DownloadString("http://2018.ip138.com/ic.asp"); string myReg = @"
([\s\S]+?)<\/center>"; Match mc = Regex.Match(response, myReg, RegexOptions.Singleline); if (mc.Success && mc.Groups.Count > 1) { var resStart = mc.Groups[1].Value.IndexOf('['); var resEnd = mc.Groups[1].Value.IndexOf(']'); var resSub = mc.Groups[1].Value.Substring(resStart + 1, resEnd - resStart - 1); response = resSub; return response; } else { return "0.0.0.0"; } } catch (Exception) { return "0.0.0.0"; } }   完美,是不是大功告成? 可是在测试的途中发现有时候依然会失败,返回数据为 "0.0.0.0" 于是我又加了一个定时器 1 2 3 4 5 GetAddressIP(); if (!this.lblIp.Content.ToString().Equals("0.0.0.0")) { selectIp.Stop(); }   每一秒去取一次Ip,直到取到为止 当然我觉得这都不是最好的办法 可是转念一想,为什么我们不自己写一个获取请求者的Ip的接口呢? 在这里我得感谢一个人 老六代码 多亏有了这位大哥的帮忙,才让我得已在 .net core api 下面成功拿到了请求者的Ip 初始化时 1 2 3 4 5 services.AddMvc(); services.Configure(options => { options.ForwardClientCertificate = false; });   然后接口这里 1 2 3 4 5 6 7 8 9 10 11 12 13 private IHttpContextAccessor _accessor; public Controller(IHttpContextAccessor accessor) { this._accessor = accessor; } [HttpPost, Route("GetIp")] public ActionResult GetIp() { var ip = _accessor.HttpContext.Connection.RemoteIpAddress; return ip.ToString(); }   因为我是.net core 的缘故。所以用到了IHttpContextAccessor 我想如果是普通的api 应该直接就可以用Request 吧,就像老六大哥说的那样~https://www.cnblogs.com/myblogslh/p/10021902.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信