Java 从起始ip和广播ip确定子网/cidr
我在ApacheCommonsNetutils和其他已知的API中进行了搜索,但找不到一个好方法。 给定一个开始Java 从起始ip和广播ip确定子网/cidr,java,networking,ipv4,Java,Networking,Ipv4,我在ApacheCommonsNetutils和其他已知的API中进行了搜索,但找不到一个好方法。 给定一个开始ip和广播如何查找子网或cidr 我知道broadcast=ip|(~子网) 但是给定起始ip和广播ip,如何查找子网 例如,启动ip=10.2.22.1和getway/broadcast ip=10.2.22.255 CIDR格式为10.2.22.0/24或netmask格式为255.255.255.0,希望对您有所帮助: int ip2Num(final String ip) {
ip
和广播
如何查找子网
或cidr
我知道broadcast=ip|(~子网)
但是给定起始ip和广播ip,如何查找子网
例如,启动ip=10.2.22.1和getway/broadcast ip=10.2.22.255
CIDR
格式为10.2.22.0/24
或netmask
格式为255.255.255.0
,希望对您有所帮助:
int ip2Num(final String ip) {
int result = 0;
final String[] segs = ip.split("\\.");
int c = 32;
for (final String s : segs) {
result |= Integer.parseInt(s) << c;
c -= 8;
}
return result;
}
// not used at that moment
String long2Ip(final int l) {
String result = "" + l;
result = result.replaceAll("(?<=\\d{3})(\\d{3})", ".$1");
return result;
}
void sendIfMatch(final String ip, final String netmask) {
final int lIp = ip2Num(ip);
final int lNm = ip2Num(netmask);
final boolean matches = ((lIp & lNm) == lIp);
if (matches) {
System.out.println("we should do something for ip " + ip);
} else {
System.out.println("dont match: " + lIp + "::" + lNm);
}
}
void test() {
sendIfMatch("10.2.22.1", "10.2.22.255");
}
int ip2Num(最终字符串ip){
int结果=0;
最后一个字符串[]segs=ip.split(“\\”);
int c=32;
用于(最终字符串s:segs){
result |=Integer.parseInt(s)找到了如何执行此操作
Integer cidrSize = Integer.numberOfLeadingZeros(startIpInteger ^ broadcastIpInteger);
String cidrNotation = startIpString/cidrSize;
如何获得IP的整数表示?
可以帮助
现在,获取网络掩码可以非常简单
SubnetInfo info = new SubnetUtils(cidrNotation).getInfo();
String netmask = info.getNetmask();
你的标题文本与你的问题文本不匹配。你实际拥有哪些项目,你在寻找哪些项目?来吧!将IP和子网设置为一个合理的数字,“|”应该可以工作。不要忘记在之后将IP设置为字符串…-只需插入一些点即可。