现在想通过一个IP地址段,算出子网掩码的位数,
比如有两个ip
192.168.1.0 ~ 192.168.1.255
要得到就是192.168.1.0/24
请问javascript如何实现?谢谢.
比如有两个ip
192.168.1.0 ~ 192.168.1.255
要得到就是192.168.1.0/24
请问javascript如何实现?谢谢.
解决方案 »
- ext combobox
- 如何处理jsp中用java赋值的js变量
- 一个html的js语句里面内置了 for循环 (新手以后补分)
- 比table动态添加行稍微复杂点,求教了~谢谢
- 一个页面有10个name相同的text标签,如何把这10个text输入的值(仅限数字)赋值给第11个text呢?
- window.open 中 URL 的最大长度问题
- 请教一个W3C浏览器插件的问题
- 请问谁使用过eWebEditor,怎么我的图片上传路径总是有错
- document.all是什么意思
- 问:用window.close(),怎能才不弹出确认对话框?
- 大哥,着急啊,怎么判断两个图层是否重叠?
- 拉动条控制层的透明度例子
求用js来描述我太太的样子!我出5K分
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script language="javascript" type="text/javascript">
/*
计算可用IP段
*/
function getIPs()
{
var zjip=document.getElementById("zjip");
var zjdz=document.getElementById("zjdz");
var ymws=document.getElementById("ymws");
if(validateIP(zjip.value))
{
if(validateMask(parseInt(ymws.value,10)))
{
//显示主机IP得二进制
var ipaddress = zjip.value.split(".");
var intipaddress=new Array(4);
intipaddress[0]= Number(ipaddress[0]);
intipaddress[1]= Number(ipaddress[1]);
intipaddress[2]= Number(ipaddress[2]);
intipaddress[3]= Number(ipaddress[3]);
var zjip_e=left0(intipaddress[0].toString(2))+left0(intipaddress[1].toString(2))+left0(intipaddress[2].toString(2))+left0(intipaddress[3].toString(2));
zjdz.innerHTML=zjip_e;
//显示子网掩码
var ym=maskNum(parseInt(ymws.value));
zwym.innerHTML=ym;
zwdz.innerHTML=getzwdz(zjip_e,ym);
//起始IP
var qsip1=left0((parseInt(zwdz.innerHTML.substr(0,8),2)).toString(2));
var qsip2=left0((parseInt(zwdz.innerHTML.substr(8,8),2)).toString(2));
var qsip3=left0((parseInt(zwdz.innerHTML.substr(16,8),2)).toString(2));
var qsip4=left0((parseInt(zwdz.innerHTML.substr(24,8),2)+1).toString(2));
IP1.innerHTML=parseInt(qsip1,2).toString(10)+"."+parseInt(qsip2,2).toString(10)+"."+parseInt(qsip3,2).toString(10)+"."+parseInt(qsip4,2).toString(10);
var gb=gbdz(zwdz.innerHTML,ym);
var zzip1=left0((parseInt(gb.substr(0,8),2)).toString(2));
var zzip2=left0((parseInt(gb.substr(8,8),2)).toString(2));
var zzip3=left0((parseInt(gb.substr(16,8),2)).toString(2));
var zzip4=left0((parseInt(gb.substr(24,8),2)-1).toString(2));
IP2.innerHTML=parseInt(zzip1,2).toString(10)+"."+parseInt(zzip2,2).toString(10)+"."+parseInt(zzip3,2).toString(10)+"."+parseInt(zzip4,2).toString(10); }
else
{
alert('掩码位数是不大于32的正整数!');
}
}
else
{
alert('请输入正确得IP地址!');
}
}
function getzwdz(strZJ,strYM)
{
var i=0;
var zwdz="";
while(i!=32)
{
if(strZJ.substr(i,1)==strYM.substr(i,1)&&strZJ.substr(i,1)=="1")
{
zwdz=zwdz+"1";
}
else
{
zwdz=zwdz+"0";
}
i=i+1;
}
return zwdz;
}
function gbdz(strZW,strYM)
{
var i=0;
var gbdz="";
while(i!=32)
{
if(strZW.substr(i,1)==strYM.substr(i,1))
{
gbdz=gbdz+"1";
}
else
{
gbdz=gbdz+"0";
}
i=i+1;
}
return gbdz;
}
function left0(num)
{
while(num.length!=8)
{
num="0"+num;
}
return num;
}
/*
验证主机IP是否合法
*/
function validateIP(strIP)
{
var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g
if(re.test(strIP))
{
if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;
}
return false;
}
/*
验证掩码位数是否合法
*/
function validateMask(intNum)
{
if(intNum>0&&intNum<33)
return true;
else
return false;
}
/*
计算子网掩码
*/
function maskNum(num)
{
var mask="";
while(mask.length!=num)
{
mask="1"+mask;
}
while(mask.length!=32)
{
mask=mask+"0";
}
return mask;
}
</script>
</head>
<body>
主 机 IP:<input id="zjip" type="text" /><br />
<br />
掩码位数:<input id="ymws" type="text" /><br />
<br />
<input id="Button1" type="button" value="button" onclick="getIPs()" /><br />
<br />
主机地址:<label id="zjdz"></label><br />
子网掩码:<label id="zwym"></label><br />
子网地址:<label id="zwdz"></label><br />
可用IP:<label id="IP1"></label>到<label id="IP2"></label>
</body>
</html>
var aIp1 = ip1.split("."),aIp2 = ip2.split(".");
for (var i=0,ip1=0,ip2=0; i<4; i++)
{
ip1 = (ip1 << 8) + parseInt(aIp1[i]);
ip2 = (ip2 << 8) + parseInt(aIp2[i]);
}
result = 0xFFFFFFFF & (ip2-ip1);
subCode = aIp1.join(".") + "/" + (32 - result.toString(2).length);
alert(subCode);
var ip1="192.168.1.0",ip2="192.168.1.255";
var aIp1 = ip1.split("."),aIp2 = ip2.split(".");
for (var i=0,ip1=0,ip2=0; i<4; i++)
{
ip1 = (ip1 << 8) + parseInt(aIp1[i]);
ip2 = (ip2 << 8) + parseInt(aIp2[i]);
}
result = 0xFFFFFFFF & (ip2-ip1);
//验证给定IP是否合法最初和最末的两个
if(/^1*$/.test(result.toString(2)))
{
subCode = aIp1.join(".") + "/" + (32 - result.toString(2).length);
alert(subCode);
}
else
{
alert("IP段不合法!");
}
再可以提出正确起始IP和结束IP的写法:
var ip1="192.168.1.1",ip2="192.168.1.255";
var aIp1 = ip1.split("."),aIp2 = ip2.split(".");
for (var i=0,ip1=0,ip2=0; i<4; i++)
{
ip1 = (ip1 << 8) + parseInt(aIp1[i]);
ip2 = (ip2 << 8) + parseInt(aIp2[i]);
}
var result = ip2 ^ ip1; //验证给定IP是否合法最初和最末的两个
if(/^1*$/.test(result.toString(2)))
{
var subCode = aIp1.join(".") + "/" + (32 - result.toString(2).length);
alert(subCode);
}
else
{
var valid = [];
for (i=1; i<8; i++)
{
valid.push(0xff & (0xff << i));
}
alert("IP段不合法:起始IP和结束IP第一个不是0的IP段\n必须是["+valid.join(",")+"]\n中的一个且之前的IP段必须为255!");
}