2012-07-02 60 views
3

我的应用程序知道用户的IP地址。 我们需要确定用户的城市,州,国家和纬度&经度。Java库从ip地址获取地理编码

有没有一个Java库可以做到这一点?

如果没有,用于将IP地址转换为地理位置的算法或数据源是什么?

回答

4

http://www.maxmind.com/app/developers提供了本地数据库和Java类来计算IP地址的位置信息。我做了一些测试。结果似乎很好。

bbc.co.uk: 212.58.241.131 : 51.283295,-0.23330688;Tadworth,N7,United Kingdom,null 
home: 76.126.242.196 : 37.369705,-122.0214;Sunnyvale,CA,United States,94086 
google.com: 74.125.224.133 : 37.419205,-122.0574;Mountain View,CA,United States,94043 
tcs.in: 202.71.129.225 : 28.666702,77.216705;Delhi,07,India,null 
ebay.com: 66.135.205.13 : 37.280304,-121.956696;Campbell,CA,United States,95008 
etrade.com: 12.153.224.22 : 34.091797,-84.2209;Alpharetta,GA,United States,30005 
whitehouse.gov: 72.247.136.110 : 42.362595,-71.0843;Cambridge,MA,United States,02142 

这里是链接到测试用例我用了JUnit,GeoLiteCityTest.java

的MaxMind提供的Java类,但不罐子。所以,我创建了一个可以构建代码并生成罐子的maven项目。这里是GitHub的项目https://github.com/snambi/GeoIP

如果你需要在你的Maven项目在pom.xml使用这个库,添加下面的依赖

<dependency> 
    <groupId>org.geomind</groupId> 
    <artifactId>geoip</artifactId> 
    <version>1.2.8</version> 
</dependency> 

添加以下库配置,“资料库”下

<repository> 
    <id>geoip</id> 
    <url>http://snambi.github.com/maven/</url> 
</repository> 
2

烨:http://www.maxmind.com/app/developers

他们提供了一个Java API(等等)。

+0

(这只会让你的纬度/长度达到城市级别) – mnuss

+0

WOW,upvote for this以及如何将书签添加到收藏夹中?我一直在研究一个网络安全软件包,这将是非常棒的与@ –

+0

@mnuss谢谢你的链接。任何想法他们如何解码IP地址的位置? – Nambi

2

我在Scala中编写了一个简单的库,它使用IPInfoDB来获取地理位置。只要在类路径中包含scala-library.jar,这也可以从Java中使用。你需要一个来自IPInfoDB的API密钥。您可以使用JSON,原始或XML格式获取输出。

代码和一些更多的文档在我的Github,也有一个jar下载。

这里有一个Java代码片段将与“城市”的决议获得地理信息:

GeoIP geoip = new GeoIP("<API Key>"); 
//Note the $.MODULE$ syntax to refer to the case class in Scala. 
System.out.println(geoip.getGeoRaw("<IP Address>", City$.MODULE$)); 

这个例子输出OK;;0.0.0.0;US;UNITED STATES;DISTRICT OF COLUMBIA;WASHINGTON;20001;38.9048;-77.0354;-05:00这是原始输出,那么它可以被解析。

也看到了这个问题Best way to get geo-location in Java

+0

IPInfoDB纯粹是一个Web API。如果可以在应用程序内完成,那将会很好。以前的答案提供了一个好的数据库。我会将这些细节作为一个单独的答案发布。感谢您提供另一个stackoverflow线程。它有很好的信息。把所有东西合并到一个地方是很好的。 – Nambi