V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lslqtz
V2EX  ›  PHP

用 PHP 如何实现输出所有 IP 地址?

  •  
  •   lslqtz · 2016-07-01 23:56:25 +08:00 via iPhone · 3403 次点击
    这是一个创建于 2826 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要是因为是 1.1.1.1 这种形式的,脑子直接抽了。
    想输出全部 IP 地址,包括保留地址和内网地址,姿势越优雅(逃)越好~~
    24 条回复    2016-07-03 10:34:31 +08:00
    yangqi
        1
    yangqi  
       2016-07-02 00:05:08 +08:00   ❤️ 2
    for($i=0; $i <= 4294967295; $i++) {
    print long2ip($i);
    }
    lslqtz
        2
    lslqtz  
    OP
       2016-07-02 00:14:26 +08:00
    已感谢,真-优雅
    pubby
        3
    pubby  
       2016-07-02 00:14:54 +08:00 via Android   ❤️ 1
    $ip:0~2^32-1 long2ip($ip)
    lslqtz
        4
    lslqtz  
    OP
       2016-07-02 00:17:19 +08:00
    @yangqi 但是我发现会输出 0.*.*.*的 IP 。。
    lslqtz
        5
    lslqtz  
    OP
       2016-07-02 00:17:47 +08:00
    @yangqi
    0.0.0.0
    0.0.0.1
    0.0.0.2
    0.0.0.3
    0.0.0.4
    0.0.0.5
    0.0.0.6
    0.0.0.7
    0.0.0.8
    0.0.0.9
    0.0.0.10
    0.0.0.11
    我试着执行了。。
    aprikyblue
        6
    aprikyblue  
       2016-07-02 00:18:34 +08:00 via Android
    for($i=0; $i <= 255; $i++) {
    for($j=0; $j <= 255; $j++) {
    for($k=0; $k <= 255; $k++) {
    for($l=0; $l <= 255; $l++) {
    print sprintf("%d.%d.%d.%d", $i, $j, $k, $l);
    }
    }
    }
    }
    yangqi
        7
    yangqi  
       2016-07-02 00:19:40 +08:00   ❤️ 1
    0.0.0.0 - 0.255.255.255 是保留地址,你不是要包括保留地址么
    lslqtz
        8
    lslqtz  
    OP
       2016-07-02 00:20:25 +08:00
    @aprikyblue 好评,本来我也想用 for ,但我感觉自己写没思路,写出来估计全会是连着的。。
    lslqtz
        9
    lslqtz  
    OP
       2016-07-02 00:20:42 +08:00
    @yangqi 长见识了,感谢。
    yangqi
        10
    yangqi  
       2016-07-02 00:23:53 +08:00
    @lslqtz 这个输出的是所有的 IPv4 的地址
    lslqtz
        11
    lslqtz  
    OP
       2016-07-02 00:29:31 +08:00
    @yangqi 明白, IPv6 还暂时碰不到
    vibbow
        12
    vibbow  
       2016-07-02 08:49:54 +08:00
    友情提示, 1 楼的代码需要 真-64 位 PHP 执行
    Snowden
        13
    Snowden  
       2016-07-02 08:53:11 +08:00
    @vibbow +1
    notgod
        14
    notgod  
       2016-07-02 10:33:07 +08:00   ❤️ 1
    for($n1=0; $n1 < 256; $n1++) {
    for($n2=0; $n2 < 256; $n2++) {
    for($n3=0; $n3 < 256; $n3++) {
    for($n4=0; $n4 < 256; $n4++) {
    echo $n1 . "." . $n2 . "." . $n3 . "." . $n4 . "\n";
    }
    }
    }
    }
    shyling
        15
    shyling  
       2016-07-02 10:47:54 +08:00 via iPad
    4 层 for
    0..2**32 再转成 ip 的格式
    shyling
        16
    shyling  
       2016-07-02 10:50:10 +08:00 via iPad
    @shyling 忘了一个点。。
    muziyue
        17
    muziyue  
       2016-07-02 15:19:19 +08:00
    不就是加强版的 99 乘法表么
    lslqtz
        18
    lslqtz  
    OP
       2016-07-02 17:27:36 +08:00 via iPhone
    @vibbow 还好我不用 win 。。
    jhdxr
        19
    jhdxr  
       2016-07-02 21:11:57 +08:00
    @lslqtz win 下又不是没有 64 位的 php http://windows.php.net/download/ 里不是就有么,你也可以自己编译一份,这黑的真是莫名其妙
    lslqtz
        20
    lslqtz  
    OP
       2016-07-02 21:38:59 +08:00
    @jhdxr 知道啊。。 win 很多环境库是 32 位, 64 位用过,不是黑。。
    realpg
        21
    realpg  
       2016-07-02 23:03:02 +08:00
    @jhdxr
    你看到#12 特意强调“真” 64 位
    因为 windows 的 64 位 php 是伪 64 位
    自己测试一下就知道了
    qhxin
        22
    qhxin  
       2016-07-02 23:48:15 +08:00
    补充

    echo (($i >> 24) & 0xff) . '.' .(($i >> 16) & 0xff) . '.' . (($i >> 8) & 0xff) . '.' . ($i & 0xff) . "\n";
    jhdxr
        23
    jhdxr  
       2016-07-03 00:06:44 +08:00
    @realpg
    C:\>php -v
    PHP 7.0.8 (cli) (built: Jun 21 2016 15:15:15) ( ZTS )
    Copyright (c) 1997-2016 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

    C:\>php -i | find /i "Architecture"
    Architecture => x64
    PROCESSOR_ARCHITECTURE => AMD64
    $_SERVER['PROCESSOR_ARCHITECTURE'] => AMD64


    test script:
    ```
    $i=4294967295;
    echo long2ip($i),"\n";
    var_dump($i);

    var_dump(PHP_INT_SIZE, PHP_INT_MAX, PHP_INT_MIN);
    ```
    output:
    255.255.255.255
    int(4294967295)
    int(8)
    int(9223372036854775807)
    int(-9223372036854775808)

    没有看出你所指的问题?
    realpg
        24
    realpg  
       2016-07-03 10:34:31 +08:00   ❤️ 1
    @jhdxr
    PHP7 已经修复这个问题
    太久不用 windows 没关注这个已经修复
    http://blog.zsxsoft.com/post/7
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4973 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:48 · PVG 17:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.