LoginSignup
21
19

More than 5 years have passed since last update.

Javaでサブネットマスクを計算する方法

Posted at

Javaでサブネットを計算し、含まれる範囲を計算しようとした際、意外と情報が見つからなかったのでメモしておきます。

ライブラリを用意

今回は自力で実装はせず、Apache Commonsの、「commons-net」を使います。

mavenなら下記のように読み込んでください。

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.3</version>
</dependency>

もしくは下記からダウンロードしてきてクラスパスを通して下さい。

使い方

IPとサブネットマスクを「SubnetUtils」クラスに読み込ませた後、SubnetUtilsからサブネット情報インスタンスを取得します。
その後、サブネット情報インスタンスから、getHighAddress()というメソッドで、指定したサブネット情報の上限を取得します。

プログラム例

public static void main(String args[]){
    {
        String ip = "192.168.0.1";
        String subnetMask = "255.255.0.0";
        // IPとサブネットマスクを読み込む
        SubnetUtils subnetUtils = new SubnetUtils(ip, subnetMask);
        SubnetInfo subnetInfo = subnetUtils.getInfo();

        // 計算
        System.out.println("IP : " + ip);
        System.out.println("サブネットマスク : " + subnetMask);
        System.out.println("下限 : " + subnetInfo.getLowAddress());
        System.out.println("上限 : " + subnetInfo.getHighAddress());
        System.out.println("含まれるIP数 : " + subnetInfo.getAddressCount());
        System.out.println("CIDR表記 : " + subnetInfo.getCidrSignature());
    }
    {
        // CIDR表記で読み込む
        String subnet = "192.168.0.0/16";
        SubnetUtils subnetUtils = new SubnetUtils(subnet);
        SubnetInfo subnetInfo = subnetUtils.getInfo();

        System.out.println("サブネット : " + subnet);
        System.out.println("下限 : " + subnetInfo.getLowAddress());
        System.out.println("上限 : " + subnetInfo.getHighAddress());
    }
}

出力結果

IP : 192.168.0.1
サブネットマスク : 255.255.0.0
下限 : 192.168.0.1
上限 : 192.168.255.254
CIDR表記 : 192.168.0.1/16
含まれるIP数 : 65534
サブネット : 192.168.0.0/16
下限 : 192.168.0.1
上限 : 192.168.255.254

他にも、指定したIPがそのサブネット内に含まれているかどうかなども判定出来るらしいです。

参考情報

下記を参考にさせて頂きました。

http://hiroaki-kono.hatenablog.com/entry/2014/04/30/213435
http://mvnrepository.com/artifact/commons-net/commons-net/
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.html
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/util/SubnetUtils.SubnetInfo.html

21
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19