Network programming 如何在IP地址范围内循环?

Network programming 如何在IP地址范围内循环?,network-programming,Network Programming,我想在IP地址范围内执行一组网络任务。一旦范围大于c类网络,我就无法枚举范围内的所有主机。 我希望能够使用netmask255.255.240.0遍历网络中的所有主机 From: 192.168.0.100 To: 192.168.10.100 起始:192.168.0.100 致:192.168.10.100 如何处理这个问题?这一定是一项相当普通的任务。我来自Cocoa iPhone编程的绿色领域,因此希望能有一个C风格的解决方案。:-) 这里有一个PHP解决方案: <?php

我想在IP地址范围内执行一组网络任务。一旦范围大于c类网络,我就无法枚举范围内的所有主机。 我希望能够使用netmask
255.255.240.0
遍历网络中的所有主机

From: 192.168.0.100 To: 192.168.10.100 起始:192.168.0.100 致:192.168.10.100 如何处理这个问题?这一定是一项相当普通的任务。我来自Cocoa iPhone编程的绿色领域,因此希望能有一个C风格的解决方案。:-)

这里有一个PHP解决方案:

<?php

$sIP1 = '192.168.0.0';
$sIP2 = '192.168.1.255';

$aIPList = array();
if ((ip2long($sIP1) !== -1) && (ip2long($sIP2) !== -1)) // As of PHP5, -1 => False
 {
 for ($lIP = ip2long($sIP1) ; $lIP <= ip2long($sIP2) ; $lIP++)
  {
  $aIPList[] = long2ip($lIP);
  }
 }
?>


对所涉及的(基础)数学有一个很好的总结

使用模运算符
%
。以下是一个基本示例:

#include <stdio.h>

int main(void) {
    int counter;
    unsigned int ip[] = { 192, 168, 0, 0 };

    for ( counter = 0; counter < 1000; ++counter ) {
        ip[3] = ( ++ ip[3] % 256 );
        if ( !ip[3] ) {
            ip[2] = ( ++ ip[2] % 256 );
        }
        printf("%u:%u:%u:%u\n", ip[0], ip[1], ip[2], ip[3]);
    }

    return 0;
}
#包括
内部主(空){
整数计数器;
无符号整数ip[]={192,168,0,0};
用于(计数器=0;计数器<1000;++计数器){
ip[3]=(++ip[3]%256);
如果(!ip[3]){
ip[2]=(++ip[2]%256);
}
printf(“%u:%u:%u:%u\n”,ip[0],ip[1],ip[2],ip[3]);
}
返回0;
}

这是一段代码,它将快速向您介绍解释IP地址和迭代IP地址所涉及的细微差别

一旦您开始将IP地址视为32位无符号整数,事情就会变得非常简单

#include <stdio.h>
int
main (int argc, char *argv[])
{
    unsigned int iterator;
    int ipStart[]={192,168,0,100};
    int ipEnd[] = {192,168,10,100};

    unsigned int startIP= (
        ipStart[0] << 24 |
        ipStart[1] << 16 |
        ipStart[2] << 8 |
        ipStart[3]);
    unsigned int endIP= (
        ipEnd[0] << 24 |
        ipEnd[1] << 16 |
        ipEnd[2] << 8 |
        ipEnd[3]);

    for (iterator=startIP; iterator < endIP; iterator++)
    {
        printf (" %d.%d.%d.%d\n",
            (iterator & 0xFF000000)>>24,
            (iterator & 0x00FF0000)>>16,
            (iterator & 0x0000FF00)>>8,
            (iterator & 0x000000FF)
        );
    }

    return 0;
}
#包括
int
main(int argc,char*argv[])
{
无符号整数迭代器;
int ipStart[]={192168,0100};
int ipEnd[]={192168,10100};
无符号整数起始点=(
ipStart[0]8,
(迭代器&0x000000FF)
);
}
返回0;
}
只需检查
ipStart
ipEnd
的元素是否大于255。

这不是IP地址,也会弄乱代码。

我读错问题了吗?实际上,192.158.0.255和192.168.1.0之间没有任何地址。可能您需要进行编辑以使其更清晰。alxp:您假设正在使用正常的IP地址映射。至少在我的家庭路由器上,我没有意识到有任何东西阻止我在123.234.123上运行LAN,尽管这是对可用寻址范围的完全错误使用。我编辑了我的问题。这个范围真是胡说八道