从Windows应用程序获取IP地址位置

3
我在stackoverflow上看到很多关于如何在asp.net中获取IP地址地理位置的问题和答案,但是...
我该怎么在winforms中获取IP地址位置?
我正在开发C# winform应用程序,需要展示用户的IP地址和其所在位置。我已经可以显示用户的本地和外部IP地址,但是我无法找到任何方法来显示位置。
有人知道我是否可以使用任何WebRequest或其他解决方案来完成这个任务吗?
编辑: 我已经通过以下方法完成了任务:
1.将IP地址发送到一个能够根据IP地址显示位置的网站。(例如www.whatismyipaddress.com) 2.获取其源代码。 3.解析其代码并使用字符串操作获取位置。
但我知道这不是一个好方法,因为如果网站关闭、移动或源代码发生任何改变,我的代码就会失效。
2个回答

4

取决于你需要多少信息。费用并不高,但完全值得支付。 - TomTom
1
是的,IPInfoDB.com提供免费服务,并刚推出了他们新的Lite版本数据库。您需要在下载任何内容之前请求API密钥。 - user343771
前天有三个答案回复了同一个问题,但今天你们只能看到一个答案了...难道 StackOverflow 有新功能可以删除答案吗?我很困惑 :O - Sangram Nandkhile

1

IpInfo 是一个很好的IP相关服务,他们还有一个不错的API

在下面的代码中,我将向该服务发出Web请求,它将返回IP信息。

这将返回您的IP信息:

public static string GetLocation(string ip)
{
    var res = "";
    WebRequest request = WebRequest.Create("http://ipinfo.io/" + ip);
    using (WebResponse response = request.GetResponse())
    using (StreamReader stream = new StreamReader(response.GetResponseStream()))
    {
        string line;
        while ((line = stream.ReadLine()) != null)
        {
            res += line;
        }
    }
    return res;
}

一个使用它的例子是:
Console.WriteLine (GetLocation("8.8.8.8"));

这将输出:

{ "ip": "8.8.8.8", "hostname": "无主机名", "city": "Mountain View", "region": "加利福尼亚州", "country": "美国", "loc": "37.3860,-122.0838", "org": "AS15169 Google Inc.", "postal": "94035"}


嘿,非常感谢。不错的方法。 - Sangram Nandkhile
@Ionică:运行此代码时我遇到了一个网络异常。 - jincy abraham
@ Ionică:谢谢 :) 我从另一个网站得到了这个。向该网站发出网络请求 :) 感谢您的更新。 - jincy abraham
如何在标签中获取所有这些信息,例如我想将主机名存储在lbl_hostname中,城市在lbl_city中,以此类推? - user3441151
@user3441151 你必须将响应字符串解析为JSON并获取所需的字段。此外,一种hacky的方法是在字符串中搜索“hostname”,并获取紧接着“:”片段之后的值。 - Ionică Bizău
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接