我正在尝试在Google App Engine上使用MaxMind GeoLite国家/地区数据库。但是,我很难让Java API工作,因为它依赖于App引擎上无法使用的InetAddress类。
但是,我不确定是否有一个简单的解决方法,因为它似乎只使用InetAddress类来确定给定主机名的IP。就我而言,无论如何,主机名始终是IP。
我需要的是一种将表示为String的IP地址转换为网络字节顺序的字节数组(InetAddress类的addr.getAddress()方法提供的方法)。
这是当前API使用的代码,我需要找到一种方法来删除对InetAddress的所有引用,同时确保它仍然有效!
感谢您的时间。
/**
* Returns the country the IP address is in.
*
* @param ipAddress String version of an IP address, i.e. "127.0.0.1"
* @return the country the IP address is from.
*/
public Country getCountry(String ipAddress) {
InetAddress addr;
try {
addr = InetAddress.getByName(ipAddress);
} catch (UnknownHostException e) {
return UNKNOWN_COUNTRY;
}
return getCountry(bytesToLong(addr.getAddress()));
}
答案 0 :(得分:1)
// note: this is ipv4 specific, and i haven't tried to compile it.
long ipAsLong = 0;
for (String byteString : ipAddress.split("\\."))
{
ipAsLong = (ipAsLong << 8) | Integer.parseInt(byteString);
}
答案 1 :(得分:1)
GeoIPCountryWhois数据库中的所有12000多个条目的格式为:
"4.17.135.32","4.17.135.63","68257568","68257599","CA","Canada"
将你所拥有的虚线四边形地址分解为子串并按范围进行范围检查。