java有类验证两个ip是不是同网段吗?

kenjun 2011-05-10 08:43:58
知道本地IP地址A以及其子网掩码,想知道IP地址B是否与A同网段。

想知道Java有没有某个类可以直接验证的?

如果没有,就得自己写方法。我思路是先获得本地IP地址以及子网掩码的前缀长度,然后将两个IP地址和子网掩码都转换成二进制码,之后用A的二进制和子网掩码进行与运算,B的二进制码和子网掩码进行与运算,比对两者得出的网络号是否一致。

IP地址转换成二进制码代码该如何写呢?例:String ip = "192.168.155.155" 求高手指导
...全文
372 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenjun 2011-05-11
  • 打赏
  • 举报
回复
期待高手解答啊…………高手们都来吧
kenjun 2011-05-11
  • 打赏
  • 举报
回复
谢谢楼上的高手,有办法获取本地连接的子网掩码吗?我知道可以获取子网掩码的前缀长度,如果只能获取前缀长度,求一个方法将前缀转换成点分十进制表示的子网掩码。
wenbodong 2011-05-10
  • 打赏
  • 举报
回复
从String转化到长整型,方法很多,我这里用的是正则表达式。
至于转化成二进制,这是你想多了。进制是浮云。计算机的进行运算的时候,都是以二进制进行运算的。只不过再存储及显示的时候,可以转换成其他的进制。
比如说int i;你说i是什么进制的呢?当然是二进制的,只不过println是以默认的十进制显示。
所以,你想进行按位与运算,根本不需要进制转换。
下面是程序:

import java.util.regex.*;
public class Text {
public static void main(String[] args) throws Exception {
String ip[]={
"192.168.1.1",
"192.168.1.2",
"192.168.2.1"
};
String mask="255.255.255.0";
long addr[]={0,0,0};
long maskNum=0;
Pattern p=Pattern.compile("\\d+");
for(int i=0;i<ip.length;i++){
Matcher m=p.matcher(ip[i]);
for(int j=0;j<4;j++){
m.find();
addr[i]<<=8;
addr[i]+=Integer.parseInt(m.group());
}
}
Matcher m=p.matcher(mask);
for(int j=0;j<4;j++){
m.find();
maskNum<<=8;
maskNum+=Integer.parseInt(m.group());
}
System.out.println((addr[0]&maskNum)==(addr[1]&maskNum));
System.out.println((addr[0]&maskNum)==(addr[2]&maskNum));
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧