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

关于 IP 计算 段位或者标识的疑问

  •  
  •   fever · 2015-01-24 15:27:42 +08:00 · 3485 次点击
    这是一个创建于 3599 天前的主题,其中的信息可能已经有所发展或是发生改变。
    阿里云服务器被恶意攻击(用的是win2008 linux该吐槽了 - -)
    38.99.82.**
    直接防火墙添加阻断 ip从38.99.82.1到 38.99.82.255 屏蔽失败
    后提交工单 阿里云让屏蔽 改成 38.92.0.0/16 就好了 说什么子网 网络标识的 我也不懂
    大家知道这个38.92.0.0/16 是怎么算出来的吗 这个叫什么 叫ip段位?还是其它的
    根据攻击ip添加防火墙都是要怎么算的

    Google之,看到一种算法,这里以38.99.82.22为例:
    A类IP段  0.0.0.0 到127.255.255.255
    B类IP段  128.0.0.0 到191.255.255.255
    C类IP段  192.0.0.0 到223.255.255.255
      
    A类的默认子网掩码 255.0.0.0     
    B类的默认子网掩码 255.255.0.0
    C类的默认子网掩码 255.255.255.0

    于是乎认为 38.99.82.**属于A类
    A类子网掩码 转换成二进制 11111111.00000000.00000000.00000000
    38.99.82.22 转换成二进制 00100110.01100011.01010010.00010110
    算法把IP和子网掩码的每位数AND (AND方法:0和1=0 0和0=0 1和1=1)
    得到 00100110.00000000.00000000.00000000 换成十进制
    得到 38.0.0.0 (说这个应该是网络标识?)
    .......然后就不知道38.92.0.0/16 这个该如何算出 38.92.0.0的 后面 /16 的意思又是什么
    在网上好像还见过后面是/24的 = =
    33 条回复    2015-01-25 18:35:32 +08:00
    linhua
        1
    linhua  
       2015-01-24 15:38:31 +08:00   ❤️ 1
    IP的CIDR表示法。38.92.0.0/16表示ip范围为38.92.0.0-38.92.255.255,16表示前面16位是固定的。可参考维基百科
    http://zh.wikipedia.org/zh/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1
    fever
        2
    fever  
    OP
       2015-01-24 15:51:09 +08:00
    @linhua 谢谢 看了还是不太懂 ==... 比如第一眼看到38.92.82.22
    不用算吗 就直接能看出段位为 38.92.0.0吗?
    那是不是所有的ip都能这样 比如 12.13.14.15这个ip 就能直接 12.13.0.0/16吗?
    linhua
        3
    linhua  
       2015-01-24 15:58:59 +08:00
    当然不能,/16只是比/24范围大了一些,屏蔽的ip多了一些而已。
    tanyuxiang
        4
    tanyuxiang  
       2015-01-24 16:06:50 +08:00   ❤️ 4
    你要用二进制,别用10进制。

    你先把你所有ip用二进制写出来。

    比如1.1.1.1就是
    00000001.00000001.00000001.00000001
    1.1.1.2就是
    00000001.00000001.00000001.00000010

    看到有多少位是相同的吗? 相同的用1表示就是
    11111111.11111111.11111111.11111100 这个就是/30

    00000001.00000001.00000001.00000000 /30就包含上面那两个ip。
    即1.1.1.0/30包括1.1.1.1和1.1.1.2(还包括1.1.1.0和1.1.1.3)
    fever
        5
    fever  
    OP
       2015-01-24 16:13:19 +08:00
    @linhua 您能再给我举个例子吗 就说看到12.13.14.15 要屏蔽 应该怎么写
    不考虑后面的/16 是12.13.0.0吗?
    fever
        6
    fever  
    OP
       2015-01-24 16:15:16 +08:00
    @tanyuxiang 这是解释后面的/16怎么出来的是吗? = =

    "你先把你所有ip用二进制写出来" 这一句 有很多 随意拿同一个段位的两个ip写出来二进制 在看相同的有多少位 就是后面的/多少吗
    bellchu
        7
    bellchu  
       2015-01-24 16:16:32 +08:00 via iPhone
    每8位含255个地址段
    世界上ipv4地址数总共有255x255x255x255=4,228,250,625。42亿多已经差不多全用光了 其中还有很多保留地址 组播地址等
    bellchu
        8
    bellchu  
       2015-01-24 16:18:02 +08:00 via iPhone   ❤️ 1
    单独一个地址 2.13.14.15/32
    @fever
    linhua
        9
    linhua  
       2015-01-24 16:18:05 +08:00
    @fever 屏蔽单个ip,如果用CIDR表示就是12.13.14.15/32。
    fever
        10
    fever  
    OP
       2015-01-24 16:20:24 +08:00
    @linhua 我的意思是段位 例如看到了这个ip12.13.14.15 然后就想屏蔽多一些 (12.13.14.1-12.13.14.255)这样的
    Showfom
        11
    Showfom  
       2015-01-24 16:21:04 +08:00 via iPhone
    CIDR 是网管必备基础知识
    linhua
        12
    linhua  
       2015-01-24 16:23:18 +08:00
    @fever 那就是12.13.14.15/24
    bellchu
        13
    bellchu  
       2015-01-24 16:23:19 +08:00 via iPhone
    11111111=/8=255.0.0.0=ip地址范围xxx.0.0.0-xxx.255.255.254
    11111111 11111111=/16=255.255.0.0=ip地址范围xxx.xxx.0.0-xxx.xxx.255.255

    推荐你看Cisco Press的TCP/IP第二版第一卷
    fever
        14
    fever  
    OP
       2015-01-24 16:23:56 +08:00
    @Showfom 见谅= =
    linhua
        15
    linhua  
       2015-01-24 16:24:39 +08:00
    @fever 错了,是12.13.14.0/24
    fever
        16
    fever  
    OP
       2015-01-24 16:25:17 +08:00
    @linhua 谢谢
    fever
        17
    fever  
    OP
       2015-01-24 16:26:21 +08:00
    @linhua 有空研究下这些知识 = =
    @bellchu 好的
    bellchu
        18
    bellchu  
       2015-01-24 16:52:48 +08:00 via iPhone   ❤️ 2
    @fever 其实没你想的那么复杂,就只会出现8个掩码,对下面几个数敏感一点就行了
    255.255.255.255=32
    255.255.255.254=31
    255.255.255.252=30
    255.255.255.248=29
    255.255.255.240=28
    255.255.245.224=27
    255.255.255.192=26
    255.255.255.128=25

    当然还有/24 就是255.255.255.0

    再上去就是/23了,255.255.254.0
    以此类推吧

    如果你只是偶尔写下iptables也不需要看tcp/ip看那么透,搞个web什么的也只会涉及到这么点了也足够了,除非你还要自己做接入,CCNA第一课也就讲这些。但是很多paper CCIE lab都过了算子网掩码还要用计算器
    ryd994
        19
    ryd994  
       2015-01-24 16:55:12 +08:00 via Android
    网上有cidr calculator,自己多试试就知道了
    lincanbin
        20
    lincanbin  
       2015-01-24 17:01:29 +08:00
    fever
        21
    fever  
    OP
       2015-01-24 17:06:21 +08:00
    @bellchu 非常感谢 我主要是网站开发的 小公司没有网管什么的 系统是win的 也就没怎么去理 平时装了个安全狗 就没理了 昨天被攻击 阿里叫我屏蔽 才发现填写ip都不会= =
    fever
        22
    fever  
    OP
       2015-01-24 17:06:46 +08:00
    @lincanbin 谢谢
    @ryd994 好的
    extreme
        23
    extreme  
       2015-01-24 18:31:04 +08:00
    我觉得你们说得太抽象了。
    不知你是否听说过IPv4是32位的,这个32位就是32个"1"。
    CIDR是通过子网掩码计算出来的。
    例如子网掩码是255.255.255.0,把这四个数字分别转换为二进制,共24个"1",那CIDR就是24。
    CIDR推回子网掩码,就是逆运算了。
    例如22这个CIDR,就是22个"1"了(IPv4是32位的,所以要补0):
    11111111111111111111110000000000
    分成四段,每段八位:
    11111111.11111111.11111100.00000000,
    然后把各段转换为十进制,就是:
    255.255.252.0

    网络标识,应该是第一个IP吧,算法比较复杂,用手机中,不方便打太多字。
    如果你看得懂PHP的话,考虑看看我写的IP计算的算法(也许大家有更优的算法,别取笑我写的那算法和代码):
    http://downloads.yzs.me/ip_calculate.php.tar.bz2
    只完成了IPv4部分,IPv6的算法已经在纸上设计好了,只不过没时间弄成PHP代码。
    $cidr这个数组是2的0次方至2的32次方的值。

    这个是用CIDR或者子网掩码计算IP数目的方法,看完后你应该知道$cidr这个数组的作用了: http://yzs.me/2013.html
    extreme
        24
    extreme  
       2015-01-24 18:32:40 +08:00   ❤️ 1
    这句话: 不知你是否听说过IPv4是32位的,这个32位就是32个"1"。

    改成这个很准确: 不知你是否听说过IPv4是32位的,这个32位就是一个长度为32的二进制数。
    tanyuxiang
        25
    tanyuxiang  
       2015-01-24 19:49:28 +08:00   ❤️ 1
    @fever 常用的就是这样,只看前面连续的1是多少位就是/多少。

    比如1111111.1111111.1111111.1111100就是/30
    1111111.1111111.1111111.00000000就是/24

    实际上并不止/24 /30这种表示方法,还可以用十进制。

    比如1111111.00000000.1111111.1111111就无法用/8来表示,只能用255.0.255.255表示。
    maye696
        26
    maye696  
       2015-01-24 22:38:21 +08:00
    刚考完计算机网络的路过
    bellchu
        27
    bellchu  
       2015-01-24 22:57:36 +08:00 via iPhone
    @tanyuxiang 没有255.0.255.255这种子网掩码。要么0.0.255.255那是反掩码,ospf和eigrp里面用的。

    子网掩码网络位在前面都为1,主机位在后面都为0,不可能有主机位0在中间的情况。
    Draplater
        28
    Draplater  
       2015-01-24 23:04:45 +08:00   ❤️ 1
    38.92.0.0/16表示所有前16位和38.92.0.0相同的IP。
    38.92.0.0就是:00100110.01011100.00000000.00000000,
    前16位00100110.01011100,
    所对应的范围是00100110.01011100.xxxxxxxx.xxxxxxxx,
    恰好为38.92.x.x
    tanyuxiang
        29
    tanyuxiang  
       2015-01-25 00:00:10 +08:00
    @bellchu LZ是要屏蔽ip段,有的是可以支持随便使用的。
    msg7086
        30
    msg7086  
       2015-01-25 08:33:42 +08:00   ❤️ 1
    以前的ABC类的那种分类已经过时了,现在都用CIDR以提高IP分配效率。
    具体要屏蔽多少要根据你的实际情况而定。
    一般屏蔽的话,单个IP,也就是/32就够了。
    如果遇到攻击IP在一个段内的,那么屏蔽/24甚至/16也可以,当然是要根据实际情况而定,没有一个万能的数字可以给你参考。
    总之CIDR数字越小,范围越大。你要是屏蔽一个/8说不定能屏蔽掉一个国家什么的。
    fever
        31
    fever  
    OP
       2015-01-25 08:50:29 +08:00
    @msg7086
    @tanyuxiang
    @Draplater
    @tanyuxiang
    @extreme
    ╮(╯▽╰)╭非常谢谢大家的耐心解答啦
    jsq2627
        32
    jsq2627  
       2015-01-25 13:57:45 +08:00   ❤️ 2
    fever
        33
    fever  
    OP
       2015-01-25 18:35:32 +08:00
    @jsq2627 谢谢啦 - -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1119 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.