1

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

  1. 拥有所有 IP 地址的列表,然后查找生成的 IP 地址列表
  2. 使用嵌套循环

我应该在这些之间采用什么解决方案(或提出更好的解决方案)?对于第一个解决方案,IP 地址表/列表的链接是什么?

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

4

4 回答 4

4

首先用 . 分割 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
  • 从 From 到 To 开始计数,然后检查不需要的字节,即1111111100000000

就这样。

于 2012-09-26T08:09:57.630 回答
3

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

于 2012-09-26T08:13:25.163 回答
2

我正在尝试更新的 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));
}

?
于 2012-09-26T08:15:56.063 回答
-3

如果您足够了解获取地址(来自网络、文件系统或用户输入),则可以通过减法测试地址本身并在此处获取 IP 地址的数量。

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

于 2012-09-26T08:09:51.010 回答