200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【shell】网络处理:判断IP是否在网段 两个ip是否同网段 IP地址范围 网段包含关系

【shell】网络处理:判断IP是否在网段 两个ip是否同网段 IP地址范围 网段包含关系

时间:2024-04-12 13:58:56

相关推荐

【shell】网络处理:判断IP是否在网段 两个ip是否同网段 IP地址范围 网段包含关系

目录

判断两个IP是否在同一网段

判断IP地址是否在某一个ip段内

IP网络地址和广播地址计算

判断两个网段是否存在包含与被包含的关系

计算可用IP地址范围

附录:

如何判断两个IP是否在同一网段原理

判断两个IP是否在同一网段

判断脚本

(转自:/3UmL3)

原理

ip和掩码做与计算。如果结果相同,则证明两个ip在同一个网段

#!/bin/bashIPPattern='^(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>$'function check_ip_valide(){IP="$1"for special_ip in ${special_ips[@]}dolocal ret=$(echo $IP | grep ${special_ip})if [ -n "$ret" ];thenreturn 1fidoneif [[ "${IP}" =~ ${IPPattern} ]]; thenreturn 0elsereturn 1fi}function calc_ip_net(){sip="$1"snetmask="$2"check_ip_valide "$sip"if [ $? -ne 0 ];then echo "";return 1;filocal ipFIELD1=$(echo "$sip" |cut -d. -f1)local ipFIELD2=$(echo "$sip" |cut -d. -f2)local ipFIELD3=$(echo "$sip" |cut -d. -f3)local ipFIELD4=$(echo "$sip" |cut -d. -f4)local netmaskFIELD1=$(echo "$snetmask" |cut -d. -f1)local netmaskFIELD2=$(echo "$snetmask" |cut -d. -f2)local netmaskFIELD3=$(echo "$snetmask" |cut -d. -f3)local netmaskFIELD4=$(echo "$snetmask" |cut -d. -f4)local tmpret1=$[$ipFIELD1&$netmaskFIELD1]local tmpret2=$[$ipFIELD2&$netmaskFIELD2]local tmpret3=$[$ipFIELD3&$netmaskFIELD3]local tmpret4=$[$ipFIELD4&$netmaskFIELD4]echo "$tmpret1.$tmpret2.$tmpret3.$tmpret4"} tmpip1=$(calc_ip_net "$1" "$3")tmpip2=$(calc_ip_net "$2" "$3")if [ "$tmpip1" != "$tmpip2" ];thenecho "no"elseecho "same"fi

实验结果

判断IP地址是否在某一个ip段内

(摘自:/m0_46171781/article/details/124489645)

方法1:利用(依赖)ipcalc

#!/bin/bashIP=$1if [ -z $IP ]thenecho -e "\e[31;42m sh ipcalc.sh IP \e[0m"exitfiwhile read MASKdomax=`/usr/bin/ipcalc -mbn $MASK|grep 'BROADCAST='|awk -F 'BROADCAST=' '{print $2}'`min=`/usr/bin/ipcalc -mbn $MASK|grep 'NETWORK='|awk -F 'NETWORK=' '{print $2}'`MIN=`echo $min|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`MAX=`echo $max|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`IPvalue=`echo $IP|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`if [ "$IPvalue" -ge "$MIN" ] && [ "$IPvalue" -le "$MAX" ]thenecho "$IP"exitfidone</etc/zabbix/zabbix_agentd.d/ipset.conf

cat > /usr/local/bin/judge_ip << 'EOF'#!/bin/bashMASK=$2IP=$1max=`/usr/bin/ipcalc -mbn $MASK|grep 'BROADCAST='|awk -F 'BROADCAST=' '{print $2}'`min=`/usr/bin/ipcalc -mbn $MASK|grep 'NETWORK='|awk -F 'NETWORK=' '{print $2}'`MIN=`echo $min|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`MAX=`echo $max|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`IPvalue=`echo $IP|awk -F"." '{printf"%.0f\n",$1*256*256*256+$2*256*256+$3*256+$4}'`if [ "$IPvalue" -ge "$MIN" ] && [ "$IPvalue" -le "$MAX" ]thenecho "$IP"exitfiEOFchmod 777 /usr/local/bin/judge_ipjudge_ip 192.168.10.11 192.168.10.0/24

方法2:

方法1中用ipcalc计算出网络地址(min)和广播地址(max),但是由于某些机器上没有安装有ipcalc,所以可以用下面《IP网络地址和广播地址计算》章节的方法计算出min和max。

IP网络地址和广播地址计算

(摘自:/blog//01/26/41c02cab944c228bfb81a1dc1f999aa0.html)

#!/bin/bashIPPattern="(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"maskPattern="[1-9]|[12][0-9]|3[01]"while :doecho -e -n "Please input a legal IP address [such as 192.168.1.1/16]: "read userInputIPMask=`echo $userInput | egrep "$IPPattern/$maskPattern"` #Such as 192.168.1.1/24if [ -z "$IPMask" ] ;thenecho "Please input the right format. [such as 192.168.1.1/1-31] "continuefiIPAddr=`echo $IPMask | cut -d/ -f1`IPType[1]=`echo $IPAddr | cut -d. -f1`IPType[2]=`echo $IPAddr | cut -d. -f2`IPType[3]=`echo $IPAddr | cut -d. -f3`IPType[4]=`echo $IPAddr | cut -d. -f4`mask=`echo $IPMask | cut -d/ -f2`echo "IP address is ${IPType[1]}*${IPType[2]}*${IPType[3]}*${IPType[4]} , Mask is $mask ."((IPHex[1]=IPType[1]<<24))((IPHex[2]=IPType[2]<<16))((IPHex[3]=IPType[3]<<8))((IPHex[4]=IPType[4]))#192 c0 ; 1 1 1((iph=${IPHex[1]}+${IPHex[2]}+${IPHex[3]}+${IPHex[4]}))#echo $iph#0xffffffff#declare -i strMask1=4294967295declare -i strMask1=0xffffffff#echo $strMask1((strMask1=strMask1<<(32-mask) & 0xffffffff))#echo $strMask1((strMask2=~strMask1))#echo $strMask2((networkAddr=iph & strMask1))((bcastAddr= (iph | strMask2) & 0xffffffff))#echo $networkAddr | awk '{printf "%x\n",$0}'#echo $bcastAddr | awk '{printf "%x\n",$0}'((IPHex[1]=networkAddr>>24 & 0x000000ff))((IPHex[2]=networkAddr>>16 & 0x000000ff))((IPHex[3]=networkAddr>>8 & 0x000000ff))((IPHex[4]=networkAddr & 0x000000ff))echo -e "Network Address : ${IPHex[1]}.${IPHex[2]}.${IPHex[3]}.${IPHex[4]}"((IPHex[1]=bcastAddr>>24 & 0x000000ff))((IPHex[2]=bcastAddr>>16 & 0x000000ff))((IPHex[3]=bcastAddr>>8 & 0x000000ff))((IPHex[4]=bcastAddr & 0x000000ff))echo -e "Broadcast Address : ${IPHex[1]}.${IPHex[2]}.${IPHex[3]}.${IPHex[4]}"done

判断两个网段是否存在包含与被包含的关系

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。