【java】根据 IP 掩码计算网络广播地址
因为业务需求,需要java程序实现根据 IP 掩码计算网络广播地址。本人对于相关知识不太了解,网上东平西凑加上他人指导写的程序,记录留作后用。
// ipMask : 127.0.0.1/24
public static String getBcast(String ipMask){
String[] ipMaskArray = ipMash.split("\\/");
int mask = Integer.parseInt(ipMaskArray[1]);
String ipaddr = ipMaskArray[0];
StringBuffer ipMasksb = new StringBuffer();
StringBuffer ipMaskfsb = new StringBuffer();
for(int i = 1; i <= 32; i++){
if(i < mask){
ipMasksb.append(1);
ipMaskfdb.append(0);
}else{
ipMasksb.append(0);
ipMaskfdb.append(1);
}
}
String netAddr = Long.toBinaryString(ipToLong(ipaddr) & Long.parseLong(ipMasksb.toString(), 2));
long longBcast = Long.parseLong(netAddr, 2) | Long.parseLong(ipMaskfsb.toString(), 2);
return longToIP(longBcast );
}
public static long ipToLong(String strIp) {
String[] ip = strIp.split("\\.");
return (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8) + Long.parseLong(ip[3]);
}
public static String longToIP(long longIp)
{
StringBuffer sb = new StringBuffer("");
// 直接右移24位
sb.append(String.valueOf((longIp >>> 24)));
sb.append(".");
// 将高8位置0,然后右移16位
sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
sb.append(".");
// 将高16位置0,然后右移8位
sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
sb.append(".");
// 将高24位置0
sb.append(String.valueOf((longIp & 0x000000FF)));
return sb.toString();
}
ip 和 Long 的互转是网上查询到的方法,具体出处开发时没记录,忘了出处,在此表示抱歉