2018-04-26 11:41 阅读 45

PHP ip计算 - >来自ipaddress的段数组

I have a request in regards to ip segments.

Example: I have an ip segment :

I would like to get an array of /24's in the above range (entered ip segment with cidr) I tried with something like below:

    $c_segment = explode("/", $segment);
    $c_mask = ipv4::CIDRtoMask($c_segment[1]);

    $input = new stdClass();
    $input->ip = $c_segment[0];
    $input->netmask = $c_mask;
    $input->ip_int = ip2long($input->ip);
    $input->netmask_int = ip2long($input->netmask);
    // Network is a logical AND between the address and netmask
    $input->network_int = $input->ip_int & $input->netmask_int;
    $input->network = long2ip($input->network_int);
    // Broadcast is a logical OR between the address and the NOT netmask
    $input->broadcast_int = $input->ip_int | (~ $input->netmask_int);
    $input->broadcast = long2ip($input->broadcast_int);

    $ranges = ipv4::rangeToCIDRList($input->ip,$input->broadcast);

    $start_seg =  ip2long($input->network);
    $end_seg = $ranges[sizeof($ranges)-1];
    $end_seg = explode("/",$end_seg);
    $end_seg = ip2long($end_seg[0]);
    $iterations = round(log($end_seg));

where $iterations should be number of /24's.. But I am not sure if it is the right way to do it (or if the above is the best way to do it..)

My end result should assist me printing ip addresses per /24 per page (with an option to paginate. (I know in the above example it would be a huge number of pages..)



  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    doutan8506 doutan8506 2018-05-02 12:05

    I know that github.com/S1lentium/IPTools does it, so you may have a look at its implementation.

    点赞 评论 复制链接分享