2012-09-26 207 views
0

我正在编写一个程序,它从用户的IP地址和IP地址获取并显示它们之间的IP地址列表。例如,如果用户给出10.0.0.1和10.0.0.5,那么我将在这两者之间显示五个IP地址。那是在我的脑海未来目前的解决方案是:在两个IP地址之间获取IP地址列表

  1. 将所有IP地址的列表,然后找得到的IP地址列表
  2. 使用嵌套循环

什么解决方案应我采用这些(或建议更好的解决方案)?对于第一种解决方案,IP地址表/列表的链接是什么?

JavaScript或Java方面的解决方案是什么?

+0

你为什么要这样?是否用于子网扫描? –

+0

是的,我在扫描子网。为此我有一个脚本告诉来自IP地址,现在我想将所有这些IP保存在不同的行中 –

+0

因此,如果这是在浏览器中运行,它可以用来扫描客户端内部网络? –

回答

3

先用.分裂的IP地址。从第一个IP地址开始,将第四部分增加到255,然后在第三部分中加1,并将第四部分设为1.直到到达IP地址。

  • IP地址字节 - >位 - >的Int32
  • 来源:10.0.10.10 - >00001010 00000000 00001010 00001010 - >167774730
  • 要:10.1.45.1 - >00001010 00000001 00101101 00000001 - >167849217
  • 开始计数来自于要和刚检查不需要的字节,即1111111100000000

这就是全部。

+1

这是错误的。 x.y.1.255 + 1不是x.y.2.1 – Fildor

+0

为什么不呢?想想你的子网掩码为255.255.0.0的情况 – Amir

+1

因为它会是x.y.2.0 – Fildor

-1

列出所有IP地址,然后查找您需要的是过度杀毒。另外,我相信你甚至可以存储该列表而不必购买一些额外的硬盘驱动器。

只需使用嵌套循环并生成要查找的IP地址即可。

-2

如果你知道足以让(从网络或从文件系统或用户输入)的地址,你可以测试与减法地址本身并获得IP地址的数量就在这里。

这是简化的,但你会得到它,如果你知道地址:000044-000002 = 000042

+0

您需要列举一些关于目标网络的信息,但在网络掩码中有描述。 – L0j1k

3

“点”写作是为人类。对于电脑,它是一个4字节的数字。所以把它解析成一个数字。然后,通过简单地增加一个数字直到达到边界并将其格式化为输出,您将获得该范围内的所有地址。

2

我尝试在an updated jsFiddle,最后我来到了下面的解决方案。以下代码适用于所有IP地址。你必须提供十六进制的开始和结束IP地址(因为它很容易,我没有为它编写代码)。

var startIp = 0x0A000001, 
endIp = 0x0A000F05; 

var temp, list = [],str; 
for(var i=startIp ; i <= endIp ; i++){ 
    temp = (i).toString(16); 
    str =''; 
    if(temp.length == 7){ 
     temp = "0"+temp; 
    } 

    for(var k=temp.length-1; k >= 0 ; k-=2){ 
     str = parseInt(temp[k-1] + "" + temp[k], 16) +"." + str ; 
    } 
    document.write(temp + " " + str+ "<br>"); 
    list.push(str.substring(0, str.length-1)); 
} 

? 
+0

由于它只在前三个组件相同时才起作用,为什么还要麻烦i,j和k循环? – Barmar

+0

最初我试图让它适用于所有的价值。但是我认为很多情况并不容易。 – Anoop

+0

另请考虑10.0.10.10和10.1.45.1的情况。我想避免嵌套循环和多个if else语句。谢谢 –