在 shell 脚本获取 ip、数字转换等网络操作
在 shell 脚本获取 ip、数字转换等网络操作
-
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>)
-
从网卡获取第一个 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#*/} }