Boo*_*ean 10 java network-programming
这是场景......我有一个子网表.(见下文)我有一个IP地址.我想基于表中的查找找出ip地址所属的子网.然后,该关联将用于确定用户所处的位置.这是一个私人网络空间,因此位置查找的标准互联网将不适用.什么是最好的方法?我是否需要将ip地址分解为数字部分并对所有子网进行逐位比较..或者Java API中是否有内置工具可以让我的生活更轻松地将IP地址与子网掩码进行比较?
我主要是寻找将ipaddress与给定子网掩码进行比较的最佳方法,并确定是匹配,还是不匹配.可选.有关如何存储列表和使用最少操作进行搜索的任何提示也将受到赞赏.
理想情况下,我会做类似的事情:
List subnetInfo = null;
subnetInfo = findSubnet('192.168.0.1'); //value null if nothing found
....
//return null if nothing found
List findSubnet(String ipaddress) {
List subnetDetails = null;
.... code here ...
return subnetDetails;
}
Run Code Online (Sandbox Code Playgroud)
表1:子网的示例列表
dk-ballerup-gen-off-v411 10.172.80.0/21 NANR-denmark-ballerup-metallbuen66-ground-first-floors-incl-dhcp-(sr14585203)
ae-dubai-ofssl-gen-off-v410 10.172.88.0/24 NANR-arab-emirates-ofssl-iflex-general-office-v410-(sr12781477)
ru-stpetersburg-gen-off-v411 10.172.89.0/24 NANR-russia-stpetersburg-general-office-incl-dhcp (bsteinba)
Run Code Online (Sandbox Code Playgroud)
Apache Commons Net有一个SubnetUtils用于此类事情,包括确定给定的 IP 地址是否在给定的子网内。
简单的例子:
String[] subnetsMasks = { ... };
Collection<SubnetInfo> subnets = new ArrayList<SubnetInfo>();
for (String subnetMask : subnetsMasks) {
subnets.add(new SubnetUtils(subnetMask).getInfo());
}
String ipAddress = ...;
for (SubnetInfo subnet : subnets) {
if (subnet.isInRange(ipAddress)) {
System.out.println("IP Address " + ipAddress + " is in range " + subnet.getCidrSignature());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8786 次 |
| 最近记录: |