V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
70599
V2EX  ›  问与答

求帮忙换算几个带掩码格式的 IP 地址(求个鱼,渔我自己琢磨吧)

  •  
  •   70599 · 2014-11-29 14:20:39 +08:00 · 2492 次点击
    这是一个创建于 3646 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是这种192.168.1.0/24这样的格式。

    请帮忙把下面的2个IP地址合并成1行带掩码格式的IP地址:
    104.223.130.170
    104.223.134.229

    请帮忙把下面的4个IP地址合并成1行带掩码格式的IP地址:
    104.127.92.146
    104.127.92.246
    104.127.93.119
    104.127.94.204

    谢谢各位朋友。
    12 条回复    2015-01-22 13:22:54 +08:00
    Automan
        1
    Automan  
       2014-11-29 14:25:58 +08:00
    全部换成二进制,看哪几位不同
    Automan
        2
    Automan  
       2014-11-29 14:26:11 +08:00
    然后32-不同的位数
    oott123
        3
    oott123  
       2014-11-29 15:00:28 +08:00 via Android
    Google:子网计算器
    70599
        4
    70599  
    OP
       2014-11-29 15:56:49 +08:00
    @Automan 感谢回复。

    @oott123 用到了,谢谢。
    scys
        5
    scys  
       2014-11-29 16:07:13 +08:00
    随便换算?
    1. 104.223.0.0/16
    2. 104.127.0.0/16
    嗯嗯,16直接上,保证包括了这几个段~
    aa65535
        6
    aa65535  
       2014-11-29 16:07:45 +08:00
    104.223.128.0/21 104.223.128.1 - 104.223.135.254
    104.127.92.0/22 104.127.92.1 - 104.127.95.254
    tywtyw2002
        7
    tywtyw2002  
       2014-11-29 17:09:57 +08:00   ❤️ 1
    没啥难度,bits操作写的比较乱,因为没啥好思路。
    python下面ip解/打包可以用(?:un|)pack + socket.(?:ntoa|aton)来做

    https://gist.github.com/tywtyw2002/9d09e22536c661fde556
    70599
        8
    70599  
    OP
       2015-01-15 23:49:52 +08:00
    @tywtyw2002 使用这个py计算['103.28.248.91', '103.28.249.91'],得到的结果是103.28.248.0/24,似乎包含不到103.28.249.91,为什么呢?
    70599
        9
    70599  
    OP
       2015-01-15 23:51:28 +08:00
    @tywtyw2002 感觉正确结果应该是103.28.248.0/23
    70599
        10
    70599  
    OP
       2015-01-15 23:56:27 +08:00
    @tywtyw2002 又把计算输入内容改成['103.28.248.91', '103.28.250.91']试了一下,这样可以得出103.28.248.0/23,可是这样又包含不到103.28.250.91了。
    tywtyw2002
        11
    tywtyw2002  
       2015-01-22 11:55:26 +08:00   ❤️ 1
    @70599

    print "%s/%d" % (r_x(x(l[0]) & (2 ** 32 - 1) << mask), (32 - mask))

    改成
    print "%s/%d" % (r_x(x(l[0]) & (2 ** 32 - 1) << mask), (31 - mask))
    70599
        12
    70599  
    OP
       2015-01-22 13:22:54 +08:00
    @tywtyw2002 感谢回复。
    计算结果正常了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2662 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:59 · PVG 22:59 · LAX 06:59 · JFK 09:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.