2013-06-10 35 views
10

IPアドレスが特定のサブネットにあるかどうかを確認するライブラリはありますか?私はApache Commons SubnetUtils(SubnetUtils.SubnetInfo.isInRange)のようなライブラリを見つけることができましたが、多くはまだIPv6をサポートしていません。JavaライブラリでIPv4またはIPv6アドレスが特定のサブネットにあるかどうかを確認する

+1

コモンズネット機能要求:ここではIPアドレスが与えられたサブネットにあるかどうかをチェックすることができますどのように投票:https://issues.apache.org/jira/browse/NET-405 – Vadzim

答えて

8

edazdarevic's CIDRUtilsは、IPv4とIPv6の両方をサポートします。この例ではboolean isInRange(String ipAddress)については言及していませんが、実装されています!

もう1つのオプションはjava-ipv6ですが、IPv4とrequires JDK7はサポートしていません。

1

The IPAddress Java libraryは、多態的にIPv4とIPv6の両方をサポートし、サブネット内のアドレスまたはサブネットの包含をチェックするメソッドを含むサブネットをサポートします。 javadocはリンクから入手できます。

ここでは、問題を解決するsample codeがあります。この問題は、IPv4またはIPv6と同じように機能します。

1

春のIpAddressMatcherを使用してください。 Apache Commons Netとは異なり、ipv4とipv6の両方をサポートしています。

private void checkIpMatch() { 
    matches("192.168.2.1", "192.168.2.1"); // true 
    matches("192.168.2.1", "192.168.2.0/32"); // false 
    matches("192.168.2.5", "192.168.2.0/24"); // true 
    matches("92.168.2.1", "fe80:0:0:0:0:0:c0a8:1/120"); // false 
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/120"); // true 
    matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/128"); // false 
    matches("fe80:0:0:0:0:0:c0a8:11", "192.168.2.0/32"); // false 
} 

private boolean matches(String ip, String subnet) { 
    IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet); 
    return ipAddressMatcher.matches(ip); 
} 

ヒント:あなたが春を使用していないとあなたが迅速な軽量なソリューションを必要とする場合でも、あなたはまだsource codeに非常に少しの変更(インタフェースを削除する)と、このクラスを使用することができます。 (このアプローチは、および/またはあなたが違反している場合、重大なプロジェクトのために推奨されるものではないが、そのlicense

1

commons-ip-mathは、IPv4およびIPv6アドレスの両方をサポートしています。

Ipv4Range.parse("192.168.0.0/24").contains(Ipv4.parse("10.0.0.1")) 
// false 

Ipv6Range.parse("2001:db8::/32").contains(Ipv6.parse("2001:db8::4")) 
// true 

(免責事項、私はコモンズ-IP-数学のメンテナの一人です)に

関連する問題