【问题标题】:How to decrement an IPV4 address using java library?如何使用 java 库减少 IPV4 地址?
【发布时间】:2018-11-19 06:22:14
【问题描述】:

我正在将 nodejs 代码转换为 Java8。

node中有如下代码

  var ipToEndAt = ippp.prev("192.168.1.225"); 

ipToEndAt 的结果是"192.168.1.224"

我需要将此行转换为 java 代码。我搜索了 SubnetUtils 库,但找不到任何合适的。

类似的我也需要将ip地址增加1

任何人都可以推荐一个库或代码 sn-p 吗?哪个是最好的

【问题讨论】:

    标签: java java-8 ipv4


    【解决方案1】:

    虽然自己动手并不太难,但 Guava 中有一个 InetAddresses 类允许这种操作。无论如何,Guava 是您工具箱中非常有用的补充。

    InetAddress address = InetAddress.getByName("192.168.1.225");
    address = InetAddresses.decrement(address);
    

    看,这看起来和 JS 代码几乎一模一样。

    在您的评论中,您声明您无法使用减量方法,这表明您使用的是非常旧的 Guava 版本。

    https://github.com/google/guava/commit/d39130651d8a90f5ebe066de7f0b2311806e5152#diff-1207ec0a4b5d3f5e5c2236b7373eefc9

    The project home page 包含有关如何将当前版本 (25.1) 添加到项目依赖项的说明。

    【讨论】:

    • 我无法使用递减方法。建议仅用于增量方法
    • 您能解释一下(最好是对您的问题进行编辑)为什么您不能使用递减方法吗?它将帮助我和其他访问者更好地了解您的问题并提供更好的建议。
    • 我正在使用 STS 编辑器。当我给 InetAddresses.decrement(address);它给出了一个错误,要求更改为 increment 。在输入 InetAddresses 之后也是如此。我寻找可用的方法。这里的减量没有出现,
    • 查看我的编辑,您使用的是非常旧的 Guava 版本。解决这个问题,你就会被设置。
    【解决方案2】:

    这可以通过IPAddress Java library 以在 IPv4 和 IPv6 之间多态的方式来完成。此外,它不限于像 Guava 那样递增或递减 1,您可以使用任何 long 值并在溢出的情况下捕获 AddressValueException。免责声明:我是 IPAddress 的项目经理。

    示例代码:

    IPAddress result = increment("192.168.1.225", -1);
    System.out.println(result);
    
    result = increment("::", 1);
    System.out.println(result);
    
    static IPAddress increment(String addrStr, long inc) throws AddressValueException {
        return new IPAddressString(addrStr).getAddress().increment(inc);
    }
    

    输出:

    192.168.1.224
    ::1
    

    更详细的sample code at the IPAddress wiki

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2017-04-16
      • 2012-12-25
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 2012-01-03
      • 2011-08-05
      相关资源
      最近更新 更多