Java 避免使用InetAddress-以网络字节顺序获取原始IP地址

Java 避免使用InetAddress-以网络字节顺序获取原始IP地址,java,google-app-engine,inetaddress,Java,Google App Engine,Inetaddress,我正在尝试使用谷歌应用程序引擎上的MaxMind GeoLite国家数据库。但是,我很难让Java API正常工作,因为它依赖于InetAddress类,而InetAddress类在应用程序引擎上不可用 但是,我不确定是否有简单的解决方法,因为它似乎只使用InetAddress类来确定给定主机名的IP。在我的例子中,主机名始终是IP 我需要的是一种将表示为字符串的IP地址转换为网络字节顺序的字节数组的方法(InetAddress类的addr.getAddress()方法提供了这种方法) 这是当前

我正在尝试使用谷歌应用程序引擎上的MaxMind GeoLite国家数据库。但是,我很难让Java API正常工作,因为它依赖于InetAddress类,而InetAddress类在应用程序引擎上不可用

但是,我不确定是否有简单的解决方法,因为它似乎只使用InetAddress类来确定给定主机名的IP。在我的例子中,主机名始终是IP

我需要的是一种将表示为字符串的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()));
}
//注意:这是特定于ipv4的,我还没有尝试编译它。
长ipAsLong=0;
for(String byteString:ipAddress.split(“\\”))
{

ipAsLong=(ipAsLongGeoIPCountryWhois数据库中的所有12000多个条目的格式如下:

"4.17.135.32","4.17.135.63","68257568","68257599","CA","Canada"

将虚线四元地址拆分为子字符串,并按此方式进行范围检查。

为代码格式表示歉意,我在创建帖子时它看起来很好。尽管所有代码都在那里。太好了!它工作得非常完美。我想你无法解释该代码的作用以及我如何扩展它以适用于ipv6?很多人感谢我对于ipv6,t需要做一些工作,因为ipv6地址中可能包含0。此外,ipv6地址不适合64位(128位长)。但对于ipv4地址,它所做的是获取每个片段,将结果向左移动8位(因为每个片段代表一个字节或8位),然后添加片段。
"4.17.135.32","4.17.135.63","68257568","68257599","CA","Canada"