• ipcalc.sh


    ipcalc.sh

    root@Anovo:~# 
    root@Anovo:~# ipcalc.sh 192.168.0.1 24
    IP=192.168.0.1
    NETMASK=255.255.255.0
    BROADCAST=192.168.0.255
    NETWORK=192.168.0.0
    PREFIX=24
    root@Anovo:~# 
    root@Anovo:~# ipcalc.sh 192.168.0.1 255.255.255.0 
    IP=192.168.0.1
    NETMASK=255.255.255.0
    BROADCAST=192.168.0.255
    NETWORK=192.168.0.0
    PREFIX=24
    root@Anovo:~# 
    root@Anovo:~# ipcalc.sh 192.168.0.1 24 2 12
    IP=192.168.0.1
    NETMASK=255.255.255.0
    BROADCAST=192.168.0.255
    NETWORK=192.168.0.0
    PREFIX=24
    START=192.168.0.2
    END=192.168.0.14
    root@Anovo:~# 
    #!/bin/sh
    
    awk -f - $* <<EOF
    function bitcount(c) {
        c=and(rshift(c, 1),0x55555555)+and(c,0x55555555)
        c=and(rshift(c, 2),0x33333333)+and(c,0x33333333)
        c=and(rshift(c, 4),0x0f0f0f0f)+and(c,0x0f0f0f0f)
        c=and(rshift(c, 8),0x00ff00ff)+and(c,0x00ff00ff)
        c=and(rshift(c,16),0x0000ffff)+and(c,0x0000ffff)
        return c
    }
    
    function ip2int(ip) {
        for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
        return ret
    }
    
    function int2ip(ip,ret,x) {
        ret=and(ip,255)
        ip=rshift(ip,8)
        for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++);
        return ret
    }
    
    function compl32(v) {
        ret=xor(v, 0xffffffff)
        return ret
    }
    
    BEGIN {
        slpos=index(ARGV[1],"/")
        if (slpos == 0) {
            ipaddr=ip2int(ARGV[1])
            dotpos=index(ARGV[2],".")
            if (dotpos == 0)
                netmask=compl32(2**(32-int(ARGV[2]))-1)
            else
                netmask=ip2int(ARGV[2])
        } else {
            ipaddr=ip2int(substr(ARGV[1],0,slpos-1))
            netmask=compl32(2**(32-int(substr(ARGV[1],slpos+1)))-1)
            ARGV[4]=ARGV[3]
            ARGV[3]=ARGV[2]
        }
    
        network=and(ipaddr,netmask)
        broadcast=or(network,compl32(netmask))
    
        start=or(network,and(ip2int(ARGV[3]),compl32(netmask)))
        limit=network+1
        if (start<limit) start=limit
    
        end=start+ARGV[4]
        limit=or(network,compl32(netmask))-1
        if (end>limit) end=limit
    
        print "IP="int2ip(ipaddr)
        print "NETMASK="int2ip(netmask)
        print "BROADCAST="int2ip(broadcast)
        print "NETWORK="int2ip(network)
        print "PREFIX="32-bitcount(compl32(netmask))
    
        # range calculations:
        # ipcalc <ip> <netmask> <start> <num>
    
        if (ARGC > 3) {
            print "START="int2ip(start)
            print "END="int2ip(end)
        }
    }
    EOF

    ========= End

  • 相关阅读:
    学习python -- 第018天 os模块
    学习python -- 第017天 文件读写
    重看算法 -- 动态规划 最大子段和问题
    重看算法 -- 递归与分治
    学习python -- 第016天 模块
    学习python -- 第016天 浅拷贝和深拷贝
    网络字节序、主机字节序(摘抄)
    C++/C常量
    结构化程序设计
    循环(高质量4.10)
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/16460612.html
Copyright © 2020-2023  润新知