在 shell 脚本获取 ip、数字转换等网络操作

在 shell 脚本获取 ip、数字转换等网络操作

  1. ip 和数字的相互转换

    ip转换为数字 ::

    function ip2num() {
    local ip=\(1 local a=\)(echo $ip | awk -F '.' '{print \(1}') local b=\)(echo $ip | awk -F '.' '{print \(2}') local c=\)(echo $ip | awk -F '.' '{print \(3}') local d=\)(echo $ip | awk -F '.' '{print \(4}') echo "\)(( (a<<24)+(b<<16)+(c<<8)+d ))"
    }

    数字转换为 ip ::

    function num2ip() {
    local num=\(1 local a=\)((num>>24))
    local b=\(((num>>16&0xff)) local c=\)((num>>8&0xff))
    local d=\(((num&0xff)) echo "\)a.\(b.\)c.$d"
    }

    CIDR 前缀转换为子网掩码数字 ::

    function prefix2masknum() {
    local prefix=$1
    local i=31
    local k=0
    local mask=0
    while [ $k -lt \(prefix ]; do bit=\)(( 1 << (i-k) ))
    mask=\((( mask+bit )) k=\)(( k+1 ))
    done
    echo $mask
    }

    然后可用 num2ip 将子网掩码数字转换为 ip 形式

    num2ip $(prefix2masknum <CIDR 前缀长度,如24>)

  2. 从网卡获取第一个 ipv4 地址和 CIDR 前缀

    获取第一个 ipv4 地址,CIDR 前缀

    function get_ip() {
    local dev=\(1 local ip_cidr=\)(ip addr show dev $dev | grep "inet[[:blank:]]") |
    head -n 1 | awk '{print $2}'
    echo ${ip_cidr%/*}
    }

    function get_prefix() {
    local dev=\(1 local ip_cidr=\)(ip addr show dev $dev | grep "inet[[:blank:]]") |
    head -n 1 | awk '{print $2}'
    echo ${ip_cidr#*/}
    }

posted @ 2017-01-06 14:25  drop *  阅读(1634)  评论(0)    收藏  举报