免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kaka_sun
打印 上一主题 下一主题

求:判断某一ip地址是否属于某一ip网段的脚本 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-12-09 21:10 |只看该作者
  分的确是点的给老大的,奇怪却分给了另一个好心人!!!!

论坛徽章:
0
12 [报告]
发表于 2008-12-10 09:30 |只看该作者


供参考:

IPLIST=$(cat ip)
NETLIST=$(cat network)

for ip in ${IPLIST}
do
  echo "IP: $ip";
  for network in ${NETLIST}
  do
    [ "$(ipcalc -n $ip/${n ...


好像不行啊,我测试了一下,不行

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
13 [报告]
发表于 2008-12-10 10:12 |只看该作者
原帖由 kaka_sun 于 2008-12-10 09:30 发表


好像不行啊,我测试了一下,不行

什么错误?我只简单测了一下。
$ ls
ip  network
$
$ IPLIST=$(cat ip)
$ echo ${IPLIST}
211.130.6.2 192.168.24.279 211.147.6.3 202.99.8.1 202.106.7.1 211.103.0.3 221.131.0.5
$
$ NETLIST=$(cat network)
$ echo ${NETLIST}
211.103.0.0/20 221.131.0.0/16 192.168.24.0/24
$
$ for ip in ${IPLIST}
   do
   echo "IP: $ip";
   for network in ${NETLIST}
   do
     [ "$(ipcalc -n $ip/${network#*/} | sed -n '2,$p')" = "$(ipcalc -n $network | sed -n '2,$p')" ] &&
                               echo -e "$ip\tis in $network" ||
                               echo -e "$ip\tis not in $network"

   done
   echo "--------------------------------";
done
IP: 211.130.6.2
211.130.6.2     is not in 211.103.0.0/20
211.130.6.2     is not in 221.131.0.0/16
211.130.6.2     is not in 192.168.24.0/24
--------------------------------
IP: 192.168.24.279
192.168.24.279  is not in 211.103.0.0/20
192.168.24.279  is not in 221.131.0.0/16
192.168.24.279  is not in 192.168.24.0/24
--------------------------------
IP: 211.147.6.3
211.147.6.3     is not in 211.103.0.0/20
211.147.6.3     is not in 221.131.0.0/16
211.147.6.3     is not in 192.168.24.0/24
--------------------------------
IP: 202.99.8.1
202.99.8.1      is not in 211.103.0.0/20
202.99.8.1      is not in 221.131.0.0/16
202.99.8.1      is not in 192.168.24.0/24
--------------------------------
IP: 202.106.7.1
202.106.7.1     is not in 211.103.0.0/20
202.106.7.1     is not in 221.131.0.0/16
202.106.7.1     is not in 192.168.24.0/24
--------------------------------
IP: 211.103.0.3
211.103.0.3     is in 211.103.0.0/20
211.103.0.3     is not in 221.131.0.0/16
211.103.0.3     is not in 192.168.24.0/24
--------------------------------
IP: 221.131.0.5
221.131.0.5     is not in 211.103.0.0/20
221.131.0.5     is in 221.131.0.0/16
221.131.0.5     is not in 192.168.24.0/24
--------------------------------

论坛徽章:
0
14 [报告]
发表于 2008-12-10 10:26 |只看该作者
IP: 211.130.6.2
211.130.6.2     is in 211.103.0.0/20
211.130.6.2     is in 221.131.0.0/16
211.130.6.2     is in 192.168.24.0/24
--------------------------------
IP: 192.168.24.279
ipcalc: bad ip address: 192.168.24.279
192.168.24.279  is in 211.103.0.0/20
ipcalc: bad ip address: 192.168.24.279
192.168.24.279  is in 221.131.0.0/16
ipcalc: bad ip address: 192.168.24.279
192.168.24.279  is in 192.168.24.0/24
--------------------------------
IP: 211.147.6.3
211.147.6.3     is in 211.103.0.0/20
211.147.6.3     is in 221.131.0.0/16
211.147.6.3     is in 192.168.24.0/24
--------------------------------
IP: 202.99.8.1
202.99.8.1      is in 211.103.0.0/20
202.99.8.1      is in 221.131.0.0/16
202.99.8.1      is in 192.168.24.0/24
--------------------------------
IP: 202.106.7.1
202.106.7.1     is in 211.103.0.0/20
202.106.7.1     is in 221.131.0.0/16
202.106.7.1     is in 192.168.24.0/24
--------------------------------
IP: 211.103.0.3
211.103.0.3     is in 211.103.0.0/20
211.103.0.3     is in 221.131.0.0/16
211.103.0.3     is in 192.168.24.0/24
--------------------------------
IP: 221.131.0.5
221.131.0.5     is in 211.103.0.0/20
221.131.0.5     is in 221.131.0.0/16
221.131.0.5     is in 192.168.24.0/24
--------------------------------


这是我得出的结果,为何不一样呢?

论坛徽章:
0
15 [报告]
发表于 2008-12-10 10:48 |只看该作者
IPLIST=$(cat ip)
NETLIST=$(cat network)

for ip in ${IPLIST}
do
  echo "IP: $ip";
  for network in ${NETLIST}
  do
    [ "$(ipcalc -n $ip/${network#*/})" = "$(ipcalc -n $network)" ] &&
                              echo -e "$ip\tis in $network" ||
                              echo -e "$ip\tis not in $network"

  done
  echo "--------------------------------";
done


这样就行了

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
16 [报告]
发表于 2008-12-10 12:00 |只看该作者
原帖由 kaka_sun 于 2008-12-10 10:48 发表
IPLIST=$(cat ip)
NETLIST=$(cat network)

for ip in ${IPLIST}
do
  echo "IP: $ip";
  for network in ${NETLIST}
  do
    [ "$(ipcalc -n $ip/${network#*/})" = "$(ipcalc -n $network)" ] &&
  ...

看来是ipcalc 的输出不一样。我用sed把第一行去掉了。没试其它方式。
# ipcalc -n 211.105.0.0/24
Address:   211.105.0.0          11010011.01101001.00000000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   211.105.0.0/24       11010011.01101001.00000000. 00000000
HostMin:   211.105.0.1          11010011.01101001.00000000. 00000001
HostMax:   211.105.0.254        11010011.01101001.00000000. 11111110
Broadcast: 211.105.0.255        11010011.01101001.00000000. 11111111
Hosts/Net: 254                   Class C

# ipcalc -n 211.105.0.3/24
Address:   211.105.0.3          11010011.01101001.00000000. 00000011
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   211.105.0.0/24       11010011.01101001.00000000. 00000000
HostMin:   211.105.0.1          11010011.01101001.00000000. 00000001
HostMax:   211.105.0.254        11010011.01101001.00000000. 11111110
Broadcast: 211.105.0.255        11010011.01101001.00000000. 11111111
Hosts/Net: 254                   Class C
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP