Files
itooldog/public/static/script/pcjs/subnetmask.js
T
2023-03-22 11:41:09 +08:00

1291 lines
50 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- to hide script contents from old browsers
function h_initArray() {
this.length = h_initArray.arguments.length;
for (var i = 0; i < this.length; i++)
this[i] = h_initArray.arguments[i];
}
function h_from10toradix(value,radix){
var retval = '';
var ConvArray = new h_initArray(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
var intnum;
var tmpnum;
var i = 0;
intnum = parseInt(value,10);
if (isNaN(intnum)){
retval = 'NaN';
}else{
if (intnum < 1){
retval ="0";
}else{
retval = "";
}
while (intnum > 0.9){
i++;
tmpnum = intnum;
// cancatinate return string with new digit:
retval = ConvArray[tmpnum % radix] + retval;
intnum = Math.floor(tmpnum / radix);
if (i > 100){
// break infinite loops
retval = 'NaN';
break;
}
}
}
return retval;
}
function h_paddto2(str) {
while(str.length <2){
str= "0" + str;
}
return(str);
}
function h_paddto8(str) {
while(str.length <8){
str= "0" + str;
}
return(str);
}
//--------------------------
function h_countbitsfromleft(num)
{
if (num == 255 ){
return(8);
}
i = 0;
bitpat=0xff00;
while (i
< 8){
if (num == (bitpat & 0xff)){
return(i);
}
bitpat=bitpat >> 1;
i++;
}
return(Number.NaN);
}
function calcNWbits(cform)
{
sumofbits = 0;
tmpvar = parseInt(cform.snm_1.value,10);
if (isNaN(tmpvar)){
cform.result.value = '无效';
return;
}
bitsfromleft=h_countbitsfromleft(tmpvar);
if (isNaN(bitsfromleft)){
cform.result.value = '无效';
return;
}
sumofbits+=bitsfromleft;
//
tmpvar = parseInt(cform.snm_2.value,10);
if (isNaN(tmpvar)){
cform.result.value = '无效';
return;
}
bitsfromleft=h_countbitsfromleft(tmpvar);
if (isNaN(bitsfromleft)){
cform.result.value = '无效';
return;
}
sumofbits+=bitsfromleft;
//
tmpvar = parseInt(cform.snm_3.value,10);
if (isNaN(tmpvar)){
cform.result.value = '无效';
return;
}
bitsfromleft=h_countbitsfromleft(tmpvar);
if (isNaN(bitsfromleft)){
cform.result.value = '无效';
return;
}
sumofbits+=bitsfromleft;
//
tmpvar = parseInt(cform.snm_4.value,10);
if (isNaN(tmpvar)){
cform.result.value = '无效';
return;
}
bitsfromleft=h_countbitsfromleft(tmpvar);
if (isNaN(bitsfromleft)){
cform.result.value = '无效';
return;
}
sumofbits+=bitsfromleft;
cform.result.value = sumofbits;
return;
}
function resetform1(cform) {
cform.result.value = "";
cform.snm_1.value=255;
cform.snm_2.value=255;
cform.snm_3.value=255;
cform.snm_4.value=0;
}
//--------------------------
function h_fillbitsfromleft(num)
{
if (num >= 8 ){
return(255);
}
bitpat=0xff00;
while (num > 0){
bitpat = bitpat >> 1;
num--;
}
return(bitpat & 0xff);
}
function calcNWmask(cform)
{
tmpvar = parseInt(cform.bits.value, 10);
if (isNaN(tmpvar) || tmpvar > 32 || tmpvar < 0){
cform.snm_1.value = '错误';
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
return(1);
}
cform.snm_1.value=0;
cform.snm_2.value=0;
cform.snm_3.value=0;
cform.snm_4.value=0;
if (tmpvar >= 8){
cform.snm_1.value = 255;
tmpvar-=8;
}else{
cform.snm_1.value = h_fillbitsfromleft(tmpvar);
return(0);
}
if (tmpvar >= 8){
cform.snm_2.value = 255;
tmpvar-=8;
}else{
cform.snm_2.value = h_fillbitsfromleft(tmpvar);
return(0);
}
if (tmpvar >= 8){
cform.snm_3.value = 255;
tmpvar-=8;
}else{
cform.snm_3.value = h_fillbitsfromleft(tmpvar);
return(0);
}
cform.snm_4.value = h_fillbitsfromleft(tmpvar);
return(0);
}
function calcNWmaskForm2(cform)
{
var rt=0;
cform.hex_1.value="";
cform.hex_2.value="";
cform.hex_3.value="";
cform.hex_4.value="";
rt=calcNWmask(cform);
if (rt !=0 ){
// error
return(1);
}
tmpvar=cform.snm_1.value;
cform.hex_1.value = h_paddto2(h_from10toradix(tmpvar,16));
tmpvar=cform.snm_2.value;
cform.hex_2.value = h_paddto2(h_from10toradix(tmpvar,16));
tmpvar=cform.snm_3.value;
cform.hex_3.value = h_paddto2(h_from10toradix(tmpvar,16));
tmpvar=cform.snm_4.value;
cform.hex_4.value = h_paddto2(h_from10toradix(tmpvar,16));
}
function resetform2(cform) {
cform.bits.value = 24;
cform.snm_1.value="";
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
cform.hex_1.value="";
cform.hex_2.value="";
cform.hex_3.value="";
cform.hex_4.value="";
}
//--------------------------
function resetform3(cform) {
cform.ip_1.value = 10;
cform.ip_2.value=0;
cform.ip_3.value=0;
cform.ip_4.value=255;
cform.bits_1.value="";
cform.bits_2.value="";
cform.bits_3.value="";
cform.bits_4.value="";
cform.hex_1.value="";
cform.hex_2.value="";
cform.hex_3.value="";
cform.hex_4.value="";
}
function calcBinBits(cform)
{
cform.bits_1.value = "";
cform.bits_2.value="";
cform.bits_3.value="";
cform.bits_4.value="";
//
tmpvar = parseInt(cform.ip_1.value,10);
if (isNaN(tmpvar) || tmpvar < 0 || tmpvar > 255){
cform.bits_1.value = '错误';
return;
}
cform.bits_1.value = h_paddto8(h_from10toradix(tmpvar,2));
cform.hex_1.value = h_paddto2(h_from10toradix(tmpvar,16));
//
tmpvar = parseInt(cform.ip_2.value,10);
if (isNaN(tmpvar) || tmpvar
< 0 || tmpvar > 255){
cform.bits_2.value = '错误';
return;
}
cform.bits_2.value = h_paddto8(h_from10toradix(tmpvar,2));
cform.hex_2.value = h_paddto2(h_from10toradix(tmpvar,16));
//
tmpvar = parseInt(cform.ip_3.value,10);
if (isNaN(tmpvar) || tmpvar
< 0 || tmpvar > 255){
cform.bits_3.value = '错误';
return;
}
cform.bits_3.value = h_paddto8(h_from10toradix(tmpvar,2));
cform.hex_3.value = h_paddto2(h_from10toradix(tmpvar,16));
//
tmpvar = parseInt(cform.ip_4.value,10);
if (isNaN(tmpvar) || tmpvar
< 0 || tmpvar > 255){
cform.bits_4.value = '错误';
return;
}
cform.bits_4.value = h_paddto8(h_from10toradix(tmpvar,2));
cform.hex_4.value = h_paddto2(h_from10toradix(tmpvar,16));
}
//--------------------------
function reset_rest_from4(cform){
cform.bcast_1.value = "";
cform.bcast_2.value ="";
cform.bcast_3.value ="";
cform.bcast_4.value ="";
//
cform.nwadr_1.value ="";
cform.nwadr_2.value ="";
cform.nwadr_3.value ="";
cform.nwadr_4.value ="";
//
cform.firstadr_1.value ="";
cform.firstadr_2.value ="";
cform.firstadr_3.value ="";
cform.firstadr_4.value ="";
//
cform.lastadr_1.value ="";
cform.lastadr_2.value ="";
cform.lastadr_3.value ="";
cform.lastadr_4.value ="";
//
cform.snm_1.value ="";
cform.snm_2.value ="";
cform.snm_3.value ="";
cform.snm_4.value ="";
//
cform.numofaddr.value ="";
}
function resetform4(cform) {
cform.bits.value = 24;
cform.ip_1.value=10;
cform.ip_2.value=0;
cform.ip_3.value=0;
cform.ip_4.value=5;
//
reset_rest_from4(cform);
}
function calNBFL(cform) {
var rt=0;
reset_rest_from4(cform);
tmpvar = parseInt(cform.ip_1.value,10);
if (isNaN(tmpvar) || tmpvar > 255 || tmpvar < 0){
cform.numofaddr.value = '错误';
return(1);
}
tmpvar = parseInt(cform.ip_2.value,10);
if (isNaN(tmpvar) || tmpvar > 255 || tmpvar
< 0){
cform.numofaddr.value = '错误';
return(1);
}
tmpvar = parseInt(cform.ip_3.value,10);
if (isNaN(tmpvar) || tmpvar > 255 || tmpvar
< 0){
cform.numofaddr.value = '错误';
return(1);
}
tmpvar = parseInt(cform.ip_4.value,10);
if (isNaN(tmpvar) || tmpvar > 255 || tmpvar
< 0){
cform.numofaddr.value = '错误';
return(1);
}
rt=calcNWmask(cform);
if (rt !=0 ){
// error
return(1);
}
tmpvar=parseInt(cform.bits.value,10);
if (tmpvar
<0){
cform.numofaddr.value = '错误';
return(1);
}
if (tmpvar >32){
cform.numofaddr.value = '错误';
return(1);
}
if (tmpvar == 31){
cform.numofaddr.value = "two hosts";
cform.firstadr_1.value = cform.ip_1.value & cform.snm_1.value;
cform.firstadr_2.value = cform.ip_2.value & cform.snm_2.value;
cform.firstadr_3.value = cform.ip_3.value & cform.snm_3.value;
cform.firstadr_4.value = cform.ip_4.value & cform.snm_4.value;
//
cform.lastadr_1.value = cform.ip_1.value | (~ cform.snm_1.value & 0xff);
cform.lastadr_2.value = cform.ip_2.value | (~ cform.snm_2.value & 0xff);
cform.lastadr_3.value = cform.ip_3.value | (~ cform.snm_3.value & 0xff);
cform.lastadr_4.value = cform.ip_4.value | (~ cform.snm_4.value & 0xff);
return(1);
}
if (tmpvar == 32){
cform.numofaddr.value = "one host";
cform.firstadr_1.value = cform.ip_1.value;
cform.firstadr_2.value = cform.ip_2.value;
cform.firstadr_3.value = cform.ip_3.value;
cform.firstadr_4.value = cform.ip_4.value;
return(1);
}
cform.numofaddr.value = Math.pow(2,32 - tmpvar) - 2;
//
cform.bcast_1.value = cform.ip_1.value | (~ cform.snm_1.value & 0xff);
cform.bcast_2.value = cform.ip_2.value | (~ cform.snm_2.value & 0xff);
cform.bcast_3.value = cform.ip_3.value | (~ cform.snm_3.value & 0xff);
cform.bcast_4.value = cform.ip_4.value | (~ cform.snm_4.value & 0xff);
//
cform.nwadr_1.value = cform.ip_1.value & cform.snm_1.value;
cform.nwadr_2.value = cform.ip_2.value & cform.snm_2.value;
cform.nwadr_3.value = cform.ip_3.value & cform.snm_3.value;
cform.nwadr_4.value = cform.ip_4.value & cform.snm_4.value;
//
cform.firstadr_1.value = cform.nwadr_1.value;
cform.firstadr_2.value = cform.nwadr_2.value;
cform.firstadr_3.value = cform.nwadr_3.value;
cform.firstadr_4.value = parseInt(cform.nwadr_4.value) + 1;
//
cform.lastadr_1.value = cform.bcast_1.value;
cform.lastadr_2.value = cform.bcast_2.value;
cform.lastadr_3.value = cform.bcast_3.value;
cform.lastadr_4.value = parseInt(cform.bcast_4.value) - 1;
return(0);
}
//--------------------------
function resetform6(cform) {
cform.numofaddr.value = 5;
cform.bits.value="";
cform.maxaddr.value="";
cform.snm_1.value="";
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
}
function calcNeeded(cform){
tmpvar = parseInt(cform.numofaddr.value, 10);
if (isNaN(tmpvar) || tmpvar > 0xfffffffe || tmpvar < 1){
cform.bits.value="ERR";
cform.snm_1.value="";
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
cform.maxaddr.value="";
return;
}
expval=parseInt(Math.log(tmpvar)/Math.log(2)) + 1;
maxaddrval=Math.pow(2,expval);
if (maxaddrval - tmpvar
< 2){
expval += 1;
}
cform.maxaddr.value= Math.pow(2,expval) - 2;
cform.bits.value=32 - expval;
calcNWmask(cform);
}
//--------------------------
function calcAmount(cform){
tmpvar = parseInt(cform.bits.value, 10);
if (isNaN(tmpvar) || tmpvar > 30 || tmpvar < 0){
cform.numofaddr.value = '错误';
cform.maxaddr.value="";
cform.snm_1.value="";
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
return;
}
cform.maxaddr.value=Math.pow(2,32 - tmpvar);
cform.numofaddr.value=Math.pow(2,32 - tmpvar)- 2;
calcNWmask(cform);
}
function resetform7(cform) {
cform.numofaddr.value = "";
cform.maxaddr.value="";
cform.bits.value=27;
cform.snm_1.value="";
cform.snm_2.value="";
cform.snm_3.value="";
cform.snm_4.value="";
}
//--------------------------
function resetform8(cform) {
cform.ip_1.value = 255;
cform.ip_2.value=255;
cform.ip_3.value=240;
cform.ip_4.value=0;
cform.invert_1.value="";
cform.invert_2.value="";
cform.invert_3.value="";
cform.invert_4.value="";
}
function calcIpInvert(cform){
cform.invert_1.value = "";
cform.invert_2.value="";
cform.invert_3.value="";
cform.invert_4.value="";
//
tmpvar = parseInt(cform.ip_1.value,10);
if (isNaN(tmpvar) ){
cform.invert_1.value = 'NaN';
return;
}
cform.invert_1.value = 0xff & ~ tmpvar;
//
tmpvar = parseInt(cform.ip_2.value,10);
if (isNaN(tmpvar) ){
cform.invert_2.value = 'NaN';
return;
}
cform.invert_2.value = 0xff & ~ tmpvar;
//
tmpvar = parseInt(cform.ip_3.value,10);
if (isNaN(tmpvar) ){
cform.invert_3.value = 'NaN';
return;
}
cform.invert_3.value = 0xff & ~ tmpvar;
//
tmpvar = parseInt(cform.ip_4.value,10);
if (isNaN(tmpvar) ){
cform.invert_4.value = 'NaN';
return;
}
cform.invert_4.value = 0xff & ~ tmpvar;
}
//--------------------------
function resetform9(cform) {
cform.dec_1.value = "";
cform.bin_1.value="";
cform.num.value="";
}
function convertnum_hex(cform){
cform.dec_1.value = "";
cform.bin_1.value="";
//
tmpvar=cform.num.value.replace(/0x/i,"");
cform.num.value=tmpvar;
tmpvar = parseInt(cform.num.value,16);
if (isNaN(tmpvar) ){
cform.dec_1.value = 'NaN';
cform.bin_1.value = 'NaN';
return;
}
cform.dec_1.value = tmpvar;
cform.bin_1.value = h_from10toradix(tmpvar,2);
}
//--------------------------
function resetform10(cform) {
cform.dec_1.value = "";
cform.hex_1.value="";
cform.num.value="";
}
function convertnum_bin(cform){
cform.dec_1.value = "";
cform.hex_1.value="";
//
tmpvar = parseInt(cform.num.value,2);
if (isNaN(tmpvar) ){
cform.dec_1.value = 'NaN';
cform.hex_1.value = 'NaN';
return;
}
cform.dec_1.value = tmpvar;
cform.hex_1.value = h_from10toradix(tmpvar,16);
}
//--------------------------
function resetform11(cform) {
cform.bin_1.value = "";
cform.hex_1.value="";
cform.num.value="";
}
function convertnum_dec(cform){
cform.bin_1.value = "";
cform.hex_1.value="";
//
tmpvar = parseInt(cform.num.value,10);
if (isNaN(tmpvar) ){
cform.bin_1.value = 'NaN';
cform.hex_1.value = 'NaN';
return;
}
cform.hex_1.value = h_from10toradix(tmpvar,16);
cform.bin_1.value = h_from10toradix(tmpvar,2);
}
//--------------------------
function resetform12(cform) {
cform.hex.value = "";
cform.ip_1.value="";
cform.ip_2.value="";
cform.ip_3.value="";
cform.ip_4.value="";
cform.bits_1.value="";
cform.bits_2.value="";
cform.bits_3.value="";
cform.bits_4.value="";
}
function dot2hex(cform){
cform.ip_1.value = "";
cform.ip_2.value="";
cform.ip_3.value="";
cform.ip_4.value="";
cform.bits_1.value="";
cform.bits_2.value="";
cform.bits_3.value="";
cform.bits_4.value="";
tmpvar=cform.hex.value.replace(/0x/i,"");
cform.hex.value=tmpvar.substr(0,8);
//
tmpvar = parseInt(tmpvar,16);
if (isNaN(tmpvar)){
cform.ip_1.value = '输入错误';
return;
}
cform.hex.value = h_paddto8(cform.hex.value);
cform.ip_1.value = parseInt(cform.hex.value.substr(0,2),16);
cform.bits_1.value=h_paddto8(h_from10toradix(cform.ip_1.value,2));
cform.ip_2.value = parseInt(cform.hex.value.substr(2,2),16);
cform.bits_2.value=h_paddto8(h_from10toradix(cform.ip_2.value,2));
cform.ip_3.value = parseInt(cform.hex.value.substr(4,2),16);
cform.bits_3.value=h_paddto8(h_from10toradix(cform.ip_3.value,2));
cform.ip_4.value = parseInt(cform.hex.value.substr(6,2),16);
cform.bits_4.value=h_paddto8(h_from10toradix(cform.ip_4.value,2));
}
//--------------------------
// end hiding contents from old browsers -->
function d2h(decimal) {
var j = decimal;
var hexchars = "0123456789ABCDEF";
var hv = "";
for (var i = 0; i < 2; i++) {
k = j & 15;
hv = hexchars.charAt(k) + hv;
j = j >> 4;
}
return (hv);
}
function h2d(hex) {
var j = hex.toUpperCase();
var d = 0;
var ch = ' ';
var hexchars = "0123456789ABCDEF";
while (j.length < 4) j = 0 + j;
for (var i = 0; i < 4; i++) {
ch = j.charAt(i);
d = d * 16 + hexchars.indexOf(ch);
}
return (d);
}
function d2b(decimal) {
var bit8 = 0,
bit7 = 0,
bit6 = 0,
bit5 = 0,
bit4 = 0,
bit3 = 0,
bit2 = 0,
bit1 = 0;
if (decimal & 128) {
bit8 = 1
}
if (decimal & 64) {
bit7 = 1
}
if (decimal & 32) {
bit6 = 1
}
if (decimal & 16) {
bit5 = 1
}
if (decimal & 8) {
bit4 = 1
}
if (decimal & 4) {
bit3 = 1
}
if (decimal & 2) {
bit2 = 1
}
if (decimal & 1) {
bit1 = 1
}
return ("" + bit8 + bit7 + bit6 + bit5 + bit4 + bit3 + bit2 + bit1);
}
function d2bits(decimal) {
var bits = 0;
if (decimal & 128) {
bits = bits + 1
}
if (decimal & 64) {
bits = bits + 1
}
if (decimal & 32) {
bits = bits + 1
}
if (decimal & 16) {
bits = bits + 1
}
if (decimal & 8) {
bits = bits + 1
}
if (decimal & 4) {
bits = bits + 1
}
if (decimal & 2) {
bits = bits + 1
}
if (decimal & 1) {
bits = bits + 1
}
return (bits);
}
function snmcorrect(decimal) {
snmcorr = decimal;
if (decimal > 255) snmcorr = 255;
if (decimal == 253) snmcorr = 254;
if ((decimal > 248) && (decimal < 252)) snmcorr = 252;
if ((decimal > 240) && (decimal < 248)) snmcorr = 248;
if ((decimal > 224) && (decimal < 240)) snmcorr = 240;
if ((decimal > 192) && (decimal < 224)) snmcorr = 224;
if ((decimal > 128) && (decimal < 192)) snmcorr = 192;
if ((decimal > 0) && (decimal < 128)) snmcorr = 128;
if (decimal < 0) snmcorr = 0;
return (snmcorr);
}
function b2d(binary) {
var decimal = 0;
while (binary.length < 8) {
binary = "0" + binary;
}
if (binary.substring(7, 8) == "1") {
decimal++
}
if (binary.substring(6, 7) == "1") {
decimal = decimal + 2
}
if (binary.substring(5, 6) == "1") {
decimal = decimal + 4
}
if (binary.substring(4, 5) == "1") {
decimal = decimal + 8
}
if (binary.substring(3, 4) == "1") {
decimal = decimal + 16
}
if (binary.substring(2, 3) == "1") {
decimal = decimal + 32
}
if (binary.substring(1, 2) == "1") {
decimal = decimal + 64
}
if (binary.substring(0, 1) == "1") {
decimal = decimal + 128
}
return (decimal);
}
function bits2d(binary) {
var decimal = 0;
if (binary > 0) {
decimal = decimal + 128
}
if (binary > 1) {
decimal = decimal + 64
}
if (binary > 2) {
decimal = decimal + 32
}
if (binary > 3) {
decimal = decimal + 16
}
if (binary > 4) {
decimal = decimal + 8
}
if (binary > 5) {
decimal = decimal + 4
}
if (binary > 6) {
decimal = decimal + 2
}
if (binary > 7) {
decimal = decimal + 1
}
return (decimal);
}
function initPage() {
var f = document.forms[0];
if (f.elements.length) {
SetOrder();
}
}
var code = 'unknown';
var version = 0;
var platform = 'Win';
var j = 0;
var i = navigator.userAgent.indexOf('MSIE');
if (i >= 0 && j == 0) {
code = 'MSIE';
version = parseFloat(navigator.userAgent.substring(i + 5, i + 9));
j = 1;
}
i = navigator.userAgent.indexOf('Opera');
if (i >= 0 && j == 0) {
code = 'Opera';
version = parseFloat(navigator.userAgent.substring(i + 5, i + 11));
j = 1;
}
i = navigator.userAgent.indexOf('Mozilla/');
if (i >= 0 && j == 0) {
code = 'NS';
version = parseFloat(navigator.userAgent.substring(i + 8, i + 12));
}
if (navigator.userAgent.indexOf('Mac') >= 0) {
platform = 'Mac';
}
if (navigator.userAgent.indexOf('OS/2') >= 0) {
platform = 'OS/2';
}
if (navigator.userAgent.indexOf('X11') >= 0) {
platform = 'UNIX';
}
function ClearAll(f) {
f.node.options.selectedIndex = 0;
f.network.options.selectedIndex = 0;
f.cf[0].checked = true;
f.oct1.value = "";
f.oct2.value = "";
f.oct3.value = "";
f.oct4.value = "";
f.snm1.value = "";
f.snm2.value = "";
f.snm3.value = "";
f.snm4.value = "";
f.snm1a.value = "";
f.snm2a.value = "";
f.snm3a.value = "";
f.snm4a.value = "";
f.snm1c.value = "";
f.snm2c.value = "";
f.snm3c.value = "";
f.snm4c.value = "";
f.snm1d.value = "";
f.snm2d.value = "";
f.snm3d.value = "";
f.snm4d.value = "";
f.snm1e.value = "";
f.snm2e.value = "";
f.snm3e.value = "";
f.snm4e.value = "";
f.oct1a.value = "";
f.oct2a.value = "";
f.oct3a.value = "";
f.oct4a.value = "";
f.oct1b.value = "";
f.oct2b.value = "";
f.oct3b.value = "";
f.oct4b.value = "";
f.hex1b.value = "";
f.hex2b.value = "";
f.hex3b.value = "";
f.hex4b.value = "";
f.bin1b.value = "";
f.bin2b.value = "";
f.bin3b.value = "";
f.bin4b.value = "";
f.nw1a.value = "";
f.nw2a.value = "";
f.nw3a.value = "";
f.nw4a.value = "";
f.node1a.value = "";
f.node2a.value = "";
f.node3a.value = "";
f.node4a.value = "";
f.nwclass.value = "";
f.nwclass1.value = "";
f.subsuper.value = "";
f.nwquant.value = "";
f.nodequant.value = "";
f.snmbits.value = "";
f.broad1a.value = "";
f.broad2a.value = "";
f.broad3a.value = "";
f.broad4a.value = "";
f.snmbitsc.value = "";
f.dec1b.value = "";
}
function listsubnets(f) {
jQuery(".ObtainList").removeClass("autohide");
jQuery("#netlist").html("");
var str = "";
//compute(f);
if (f.nwclass.value != "Illegal") {
str+="<h4 class=\"lh30 col-blue02 _pr\">网络列表<span class=\"col-gray02 lh24 fwnone pl10\">";
networks = f.nwquant.value;
nodes = f.nodequant.value + 2;
if (f.subsuper.value == "子网是") {
var count = 0;
if (f.nwclass1.value == "C类网") {
str += "网络 " + eval(f.snm1.value & f.oct1.value) + "." + eval(f.snm2.value & f.oct2.value) + "." + eval(f.snm3.value & f.oct3.value) + ".0 ,掩码" + f.snm1.value + "." + f.snm2.value + "." + f.snm3.value + "." + f.snm4.value + "</span><a href=\"javascript:\" class=\"ObtLClose\">×</a></h4>";
str += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
str += "<tbody><tr><th rowspan=\"2\">网络</th><th colspan=\"2\">主机</th><th rowspan=\"2\">广播地址</th></tr><tr><th>起始</th><th>结束</th></tr>";
nodes = ((256 / networks));
for (var i = 0; i < 256; i = i + nodes) {
j = i + 1;
topi = (i + nodes - 1) & 255;
topj = topi - 1;
if (networks == 128) {
j = i;
topi = (i + nodes - 1) & 255;
topj = topi;
}
str += "<tr><td>" + f.oct1.value + "." + f.oct2.value + "." + f.oct3.value + "." + i + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + f.oct3.value + "." + j + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + f.oct3.value + "." + topj + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + f.oct3.value + "." + topi + "</td></tr>";
}
}
if (f.nwclass1.value == "B类网") {
str += "网络 " + eval(f.snm1.value & f.oct1.value) + "." + eval(f.snm2.value & f.oct2.value) + ".0.0 ,掩码" + f.snm1.value + "." + f.snm2.value + "." + f.snm3.value + "." + f.snm4.value + "</span><a href=\"javascript:\" class=\"ObtLClose\">×</a></h4>";
str += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
str += "<tbody><tr><th rowspan=\"2\">网络</th><th colspan=\"2\">主机</th><th rowspan=\"2\">广播地址</th></tr><tr><th>起始</th><th>结束</th></tr>";
nodes = ((65536 / networks));
for (var i = 0; i < 65536; i = i + nodes) {
count = count + 1;
i4 = i & 255;
i3 = (i / 256) & 255;
j = i4 + 1;
topi4 = ((i + nodes) - 1) & 255;
topi3 = (((i + nodes) - 1) / 256) & 255;
topj = topi4 - 1;
if (networks == 32768) {
j = i4;
topi4 = (i + nodes - 1) & 255;
topj = topi4;
}
str += "<tr><td>" + f.oct1.value + "." + f.oct2.value + "." + i3 + "." + i4 + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + i3 + "." + j + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + topi3 + "." + topj + "</td><td>" + f.oct1.value + "." + f.oct2.value + "." + topi3 + "." + topi4 + "</td></tr>";
if ((count == 256) && (networks > 512)) {
str += "<tr><td>..</td><td>..</td><td>..</td><td>..</td></tr>";
i = 65536 - (count * nodes);
}
}
}
if (f.nwclass1.value == "A类网") {
str += "网络 " + eval(f.snm1.value & f.oct1.value) + ".0.0.0 ,掩码" + f.snm1.value + "." + f.snm2.value + "." + f.snm3.value + "." + f.snm4.value + "</span><a href=\"javascript:\" class=\"ObtLClose\">×</a></h4>";
str += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
str += "<tbody><tr><th rowspan=\"2\">网络</th><th colspan=\"2\">主机</th><th rowspan=\"2\">广播地址</th></tr><tr><th>起始</th><th>结束</th></tr>";
nodes = ((16777216 / networks));
for (var i = 0; i < 16777216; i = i + nodes) {
count = count + 1;
i4 = i & 255;
i3 = (i / 256) & 255;
i2 = (i / 65536) & 255;
j = i4 + 1;
topi4 = ((i + nodes) - 1) & 255;
topi3 = (((i + nodes) - 1) / 256) & 255;
topi2 = (((i + nodes) - 1) / 65536) & 255;
topj = topi4 - 1;
if (networks == 8388608) {
j = i4;
topi4 = (i + nodes - 1) & 255;
topj = topi4;
}
str += "<tr><td>" + f.oct1.value + "." + i2 + "." + i3 + "." + i4 + "</td><td>" + f.oct1.value + "." + i2 + "." + i3 + "." + j + "</td><td>" + f.oct1.value + "." + topi2 + "." + topi3 + "." + topj + "</td><td>" + f.oct1.value + "." + topi2 + "." + topi3 + "." + topi4 + "</td></tr>";
if ((count == 256) && (networks > 512)) {
str += "<tr><td>..</td><td>..</td><td>..</td><td>..</td></tr>";
i = 16777216 - (count * nodes);
}
}
}
} else {
str += "网络 0.0.0.0 ,掩码 0.0.0.0</span><a href=\"javascript:\" class=\"ObtLClose\">×</a></h4>";
str += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
str += "<tbody><tr><th rowspan=\"2\">网络</th><th colspan=\"2\">主机</th><th rowspan=\"2\">广播地址</th></tr><tr><th>起始</th><th>结束</th></tr>";
str += "<tr><td>无</td><td>无</td><td>无</td><td>无</td></tr>";
}
if (f.subsuper.value == "Supernetted") {
str += "网络 " + f.nw1a.value + "." + f.nw2a.value + "." + f.nw3a.value + ".0 ,掩码" + f.snm1.value + "." + f.snm2.value + "." + f.snm3.value + "." + f.snm4.value + "</span><a href=\"javascript:\" class=\"ObtLClose\">×</a></h4>";
str += "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
str += "<tbody><tr><th rowspan=\"2\">网络</th><th colspan=\"2\">主机</th><th rowspan=\"2\">广播地址</th></tr><tr><th>起始</th><th>结束</th></tr>";
i = f.nw4a.value + 1;
j = f.broad4a.value - 1;
str += "<tr><td>" + f.nw1a.value + "." + f.nw2a.value + "." + f.nw3a.value + "." + f.nw4a.value + "</td><td>" + f.nw1a.value + "." + f.nw2a.value + "." + f.nw3a.value + "." + i + "</td><td>" + f.broad1a.value + "." + f.broad2a.value + "." + f.broad3a.value + "." + j + "</td><td>" + f.broad1a.value + "." + f.broad2a.value + "." + f.broad3a.value + "." + f.broad4a.value + "</td></tr>";
}
str += "</tbody></table>";
jQuery("#netlist").html(str);
jQuery("#netlist").append("<script type=\"text/javascript\">jQuery(\".ObtLClose\").on(\"click\",function(){jQuery(\".ObtainList\").addClass(\" autohide\");});</script>");
}
}
function compute2(f) {
var cf = f.cf.value;
// if (f.cf.value == "2") cf = f.cf[1].value;
// if (f.cf.value == "3") cf = f.cf[2].value;
// if (f.cf.value == "4") cf = f.cf[3].value;
if (code == "MSIE") {
var node = f.node.value;
var nw = f.network.value;
// if (node > 0) {
// nw = 0;
// f.network.options.selectedIndex = 0;
// node = eval(eval(node));
// }
} else {
//var i = f.node.selectedIndex;
var node = f.node.value;
//var j = f.network.selectedIndex;
var nw = f.network.value;
// if (node > 0) {
// nw = 0;
// f.network.value = 0;
// node = 0;
// }
}
if ((nw == 0) && (node == 0)) nw = 1;
var power2 = 2;
if (f.oct1.value > 255) f.oct1.value = 255;
if (f.oct2.value > 255) f.oct2.value = 255;
if (f.oct3.value > 255) f.oct3.value = 255;
if (f.oct4.value > 255) f.oct4.value = 255;
if ((f.oct1.value > 0) && (f.oct1.value < 127)) f.nwclass.value = "A类网";
if ((f.oct1.value > 127) && (f.oct1.value < 192)) f.nwclass.value = "B类网";
if ((f.oct1.value > 191) && (f.oct1.value < 224)) f.nwclass.value = "C类网";
if ((f.oct1.value < 1) || (f.oct1.value > 223)) {
f.nwclass.value = "Illegal";
f.nwclass1.value = "";
f.subsuper.value = "";
f.nwquant.value = 0;
f.nodequant.value = 0;
f.snm1.value = 0;
f.snm2.value = 0;
f.snm3.value = 0;
f.snm4.value = 0;
f.snmbits.value = 0;
}
if (((f.nwclass.value == "A类网") && (cf == 1)) || ((cf == 2) && (f.nwclass.value != "Illegal"))) {
if (nw >= 1) node = 16777216 / nw;
var nwtemp;
if (node > 16777216) {
f.nwclass1.value = "";
nw = 1073741824 / node;
nwtemp = nw;
f.snm1.value = (~((64 / nw) - 1) & 255);
f.snm2.value = 0;
f.snm3.value = 0;
f.snm4.value = 0;
f.subsuper.value = "Supernetted";
nw = 1;
} else {
f.nwclass1.value = "A类网";
nw = 16777216 / node;
nwtemp = nw;
f.snm1.value = 255;
f.snm2.value = (~((256 / nw) - 1) & 255);
f.snm3.value = (~((65536 / nw) - 1) & 255);
f.snm4.value = (~((16777216 / nw) - 1) & 255);
f.subsuper.value = "子网是";
power2 = power2 + 6;
}
while (nwtemp > 1) {
nwtemp = nwtemp / 2;
power2 = power2 + 1;
}
f.nodequant.value = node;
f.nwquant.value = nw;
f.snmbits.value = "/" + power2;
}
if (((f.nwclass.value == "B类网") && (cf == 1)) || ((cf == 3) && (f.nwclass.value != "Illegal"))) {
if (nw > 32768) nw = 32768;
if (nw >= 1) node = 65536 / nw;
var nwtemp;
if (node > 65536) {
f.nwclass1.value = "";
nw = 1073741824 / node;
nwtemp = nw;
f.snm1.value = (~((64 / nw) - 1) & 255);
f.snm2.value = (~((16384 / nw) - 1) & 255);
f.snm3.value = 0;
f.snm4.value = 0;
f.subsuper.value = "Supernetted";
nw = 1;
} else {
f.nwclass1.value = "B类网";
nw = 65536 / node;
nwtemp = nw;
f.snm1.value = 255;
f.snm2.value = 255;
f.snm3.value = (~((256 / nw) - 1) & 255);
f.snm4.value = (~((65536 / nw) - 1) & 255);
f.subsuper.value = "子网是";
power2 = power2 + 14;
}
while (nwtemp > 1) {
nwtemp = nwtemp / 2;
power2 = power2 + 1;
}
f.nodequant.value = node;
f.nwquant.value = nw;
f.snmbits.value = "/" + power2;
}
if (((f.nwclass.value == "C类网") && (cf == 1)) || ((cf == 4) && (f.nwclass.value != "Illegal"))) {
if (nw > 128) nw = 128;
if (nw >= 1) node = 256 / nw;
var nwtemp;
if (node > 256) {
f.nwclass1.value = "";
nw = 1073741824 / node;
nwtemp = nw;
f.snm1.value = (~((64 / nw) - 1) & 255);
f.snm2.value = (~((16384 / nw) - 1) & 255);
f.snm3.value = (~((4194304 / nw) - 1) & 255);
f.snm4.value = 0;
f.subsuper.value = "Supernetted";
nw = 1;
} else {
f.nwclass1.value = "C类网";
nw = 256 / node;
nwtemp = nw;
f.snm1.value = 255;
f.snm2.value = 255;
f.snm3.value = 255;
f.snm4.value = (~((256 / nw) - 1) & 255);
f.subsuper.value = "子网是";
power2 = power2 + 22;
}
while (nwtemp > 1) {
nwtemp = nwtemp / 2;
power2 = power2 + 1;
}
f.nodequant.value = node;
f.nwquant.value = nw;
f.snmbits.value = "/" + power2;
}
// f.snm1a.value = f.snm1.value;
// f.snm2a.value = f.snm2.value;
// f.snm3a.value = f.snm3.value;
// f.snm4a.value = f.snm4.value;
// f.oct1a.value = f.oct1.value;
// f.oct2a.value = f.oct2.value;
// f.oct3a.value = f.oct3.value;
// f.oct4a.value = f.oct4.value;
// f.oct1b.value = f.oct1.value;
// f.oct2b.value = f.oct2.value;
// f.oct3b.value = f.oct3.value;
// f.oct4b.value = f.oct4.value;
// compute(f);
// compute3(f);
// f.snm1c.value = f.snm1.value;
// f.snm2c.value = f.snm2.value;
// f.snm3c.value = f.snm3.value;
// f.snm4c.value = f.snm4.value;
// computeSNMA(f);
// f.snm1d.value = f.snm1.value;
// f.snm2d.value = f.snm2.value;
// f.snm3d.value = f.snm3.value;
// f.snm4d.value = f.snm4.value;
// computeINV1(f);
// if (((f.nw1a.value == 0) && (f.nw2a.value == 0) && (f.nw3a.value == 0) && (f.nw4a.value == 0)) || ((f.broad1a.value == 255) && (f.broad2a.value == 255) && (f.broad3a.value == 255) && (f.broad4a.value == 255))) {
// f.nwclass.value = "Illegal";
// f.nwclass1.value = "";
// f.subsuper.value = "";
// f.nwquant.value = 0;
// f.nodequant.value = 0;
// f.snm1.value = 0;
// f.snm2.value = 0;
// f.snm3.value = 0;
// f.snm4.value = 0;
// f.snmbits.value = 0;
// }
}
function compute(f) {
if (f.oct1a.value > 255) f.oct1a.value = 255;
if (f.oct2a.value > 255) f.oct2a.value = 255;
if (f.oct3a.value > 255) f.oct3a.value = 255;
if (f.oct4a.value > 255) f.oct4a.value = 255;
if (f.snm1a.value > 255) f.snm1a.value = 255;
if (f.snm2a.value > 255) f.snm2a.value = 255;
if (f.snm3a.value > 255) f.snm3a.value = 255;
if (f.snm4a.value > 255) f.snm4a.value = 255;
f.nw1a.value = eval(f.snm1a.value & f.oct1a.value);
f.nw2a.value = eval(f.snm2a.value & f.oct2a.value);
f.nw3a.value = eval(f.snm3a.value & f.oct3a.value);
f.nw4a.value = eval(f.snm4a.value & f.oct4a.value);
f.node1a.value = eval(~f.snm1a.value & f.oct1a.value);
f.node2a.value = eval(~f.snm2a.value & f.oct2a.value);
f.node3a.value = eval(~f.snm3a.value & f.oct3a.value);
f.node4a.value = eval(~f.snm4a.value & f.oct4a.value);
f.broad1a.value = ((f.nw1a.value) ^ (~f.snm1a.value) & 255);
f.broad2a.value = ((f.nw2a.value) ^ (~f.snm2a.value) & 255);
f.broad3a.value = ((f.nw3a.value) ^ (~f.snm3a.value) & 255);
f.broad4a.value = ((f.nw4a.value) ^ (~f.snm4a.value) & 255);
}
function compute3(f) {
if (f.oct1b.value > 255) f.oct1b.value = 255;
if (f.oct2b.value > 255) f.oct2b.value = 255;
if (f.oct3b.value > 255) f.oct3b.value = 255;
if (f.oct4b.value > 255) f.oct4b.value = 255;
f.bin1b.value = d2b(f.oct1b.value);
f.bin2b.value = d2b(f.oct2b.value);
f.bin3b.value = d2b(f.oct3b.value);
f.bin4b.value = d2b(f.oct4b.value);
f.hex1b.value = d2h(f.oct1b.value);
f.hex2b.value = d2h(f.oct2b.value);
f.hex3b.value = d2h(f.oct3b.value);
f.hex4b.value = d2h(f.oct4b.value);
f.dec1b.value = eval(f.oct1b.value * 16777216) + eval(f.oct2b.value * 65536) + eval(f.oct3b.value * 256) + eval(f.oct4b.value);
}
function compute4(f) {
f.oct1b.value = b2d(f.bin1b.value);
f.oct2b.value = b2d(f.bin2b.value);
f.oct3b.value = b2d(f.bin3b.value);
f.oct4b.value = b2d(f.bin4b.value);
f.hex1b.value = d2h(f.oct1b.value);
f.hex2b.value = d2h(f.oct2b.value);
f.hex3b.value = d2h(f.oct3b.value);
f.hex4b.value = d2h(f.oct4b.value);
f.dec1b.value = eval(f.oct1b.value * 16777216) + eval(f.oct2b.value * 65536) + eval(f.oct3b.value * 256) + eval(f.oct4b.value);
}
function compute5(f) {
f.oct1b.value = h2d(f.hex1b.value);
f.oct2b.value = h2d(f.hex2b.value);
f.oct3b.value = h2d(f.hex3b.value);
f.oct4b.value = h2d(f.hex4b.value);
f.bin1b.value = d2b(f.oct1b.value);
f.bin2b.value = d2b(f.oct2b.value);
f.bin3b.value = d2b(f.oct3b.value);
f.bin4b.value = d2b(f.oct4b.value);
f.dec1b.value = eval(f.oct1b.value * 16777216) + eval(f.oct2b.value * 65536) + eval(f.oct3b.value * 256) + eval(f.oct4b.value);
}
function compute6(f) {
f.oct1b.value = f.dec1b.value >>> 24;
f.oct2b.value = (f.dec1b.value << 8) >>> 24;
f.oct3b.value = (f.dec1b.value << 16) >>> 24;
f.oct4b.value = (f.dec1b.value << 24) >>> 24;
f.bin1b.value = d2b(f.oct1b.value);
f.bin2b.value = d2b(f.oct2b.value);
f.bin3b.value = d2b(f.oct3b.value);
f.bin4b.value = d2b(f.oct4b.value);
f.hex1b.value = d2h(f.oct1b.value);
f.hex2b.value = d2h(f.oct2b.value);
f.hex3b.value = d2h(f.oct3b.value);
f.hex4b.value = d2h(f.oct4b.value);
}
function computeSNMA(f) {
f.snm1c.value = snmcorrect(f.snm1c.value);
if (f.snm1c.value < 255) {
f.snm2c.value = 0;
f.snm3c.value = 0;
f.snm4c.value = 0;
} else {
f.snm2c.value = snmcorrect(f.snm2c.value);
if (f.snm2c.value < 255) {
f.snm1c.value = 255;
f.snm3c.value = 0;
f.snm4c.value = 0;
} else {
f.snm3c.value = snmcorrect(f.snm3c.value);
if (f.snm3c.value < 255) {
f.snm1c.value = 255;
f.snm2c.value = 255;
f.snm4c.value = 0;
} else {
f.snm4c.value = snmcorrect(f.snm4c.value);
}
}
}
bits = 0;
bits = bits + d2bits(f.snm1c.value);
bits = bits + d2bits(f.snm2c.value);
bits = bits + d2bits(f.snm3c.value);
bits = bits + d2bits(f.snm4c.value);
f.snmbitsc.value = bits;
}
function computeSNMB(f) {
if (f.snmbitsc.value < 0) f.snmbitsc.value = 0;
if (f.snmbitsc.value > 32) f.snmbitsc.value = 32;
f.snm1c.value = bits2d(f.snmbitsc.value);
f.snm2c.value = bits2d(f.snmbitsc.value - 8);
f.snm3c.value = bits2d(f.snmbitsc.value - 16);
f.snm4c.value = bits2d(f.snmbitsc.value - 24);
}
function computeINV1(f) {
f.snm1e.value = ~(f.snm1d.value) & 255;
f.snm2e.value = ~(f.snm2d.value) & 255;
f.snm3e.value = ~(f.snm3d.value) & 255;
f.snm4e.value = ~(f.snm4d.value) & 255;
}