LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 913|回复: 2

[求教!]SHELL脚本怎么实现校验两个IP在同一子网内?

[复制链接]
发表于 2008-3-11 00:13:04 | 显示全部楼层 |阅读模式
请问SHELL脚本怎么实现校验两个IP在同一子网内?
哪位大虾能给个脚本.....非常感谢.
  #!/bin/sh


如输入
AIP:10.161.100.200
A子网掩码:255.255.255.0

此时输入B的IP:10.161.100.222
能够提示用户在同一子网内了,请重新输入?
发表于 2008-3-11 09:08:43 | 显示全部楼层
用bash写了一个
ip.sh
  1. #!/bin/bash
  2. IPA='10.161.100.200'
  3. MASK='255.255.255.0'
  4. IP="$1"
  5. IFS='.' read IP1 IP2 IP3 IP4 <<<"$IPA"
  6. #echo "$IP1 $IP2 $IP3 $IP4"
  7. IPN=$(((IP1<<24) + (IP2<<16) + (IP3<<8) + IP4))
  8. #echo $IPN
  9. IFS='.' read IP1 IP2 IP3 IP4 <<<"$MASK"
  10. #echo "$IP1 $IP2 $IP3 $IP4"
  11. MASKN=$(((IP1<<24) + (IP2<<16) + (IP3<<8) + IP4))
  12. #echo $MASKN
  13. NET=$((IPN & MASKN))
  14. IP4=$NET
  15. #echo $NET
  16. IP1=$((IP4/(1<<24)))
  17. IP4=$((IP4 % (1<<24)))
  18. IP2=$((IP4/(1<<16)))
  19. IP4=$((IP4 % (1<<16)))
  20. IP3=$((IP4/(1<<8)))
  21. IP4=$((IP4%(1<<8)))
  22. #echo "$IP1.$IP2.$IP3.$IP4"
  23. IFS='.' read IP1 IP2 IP3 IP4 <<<"$IP"
  24. #echo "$IP1 $IP2 $IP3 $IP4"
  25. IPN=$(((IP1<<24) + (IP2<<16) + (IP3<<8) + IP4))
  26. #echo $IPN
  27. NET1=$((IPN & MASKN))
  28. #echo ${NET1}
  29. if [ $NET -eq $NET1 ];then
  30.         echo $IPA
  31.         echo $MASK
  32.         echo "$IPA and $IP in same subnet"
  33. else
  34.         echo $IPA
  35.         echo $MASK
  36.         echo "$IPA and $IP not in same subnet"
  37. fi
复制代码

chmod +x ip.sh
./ip.sh 10.161.100.222
回复 支持 反对

使用道具 举报

发表于 2008-3-11 13:02:23 | 显示全部楼层
ipcalc 命令可以计算 network,然后比较之就可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表