免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3779 | 回复: 25
打印 上一主题 下一主题

请教一个匹配脚本的写法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-10 21:26 |只看该作者 |倒序浏览
请教一个shell脚本的写法,也就是根据浏览器返回的ip地址(cgi 已经完成),来匹配cnc的地址段,如果匹配返回非零,不匹配则返回0值;主要是不知道如何匹配根据地址匹配掩码,请各位老大帮忙,谢谢啦。
58.16.0.0/16;
58.17.0.0/17;
58.17.128.0/17;
58.18.0.0/16;
58.19.0.0/16;
58.20.0.0/16;
58.21.0.0/16;
58.22.0.0/15;
58.240.0.0/15;
58.242.0.0/15;
58.244.0.0/15;
58.246.0.0/15;
58.248.0.0/13;
60.0.0.0/13;
60.8.0.0/15;
60.10.0.0/16;
60.11.0.0/16;
60.12.0.0/16;
60.13.0.0/18;
60.13.128.0/17;
60.14.0.0/15;
60.16.0.0/13;
60.24.0.0/14;
60.30.0.0/16;
60.31.0.0/16;
60.208.0.0/13;
60.216.0.0/15;
60.218.0.0/15;
60.220.0.0/14;
61.48.0.0/13;
61.133.0.0/17;
61.134.96.0/19;
61.134.128.0/17;
61.135.0.0/16;
61.137.128.0/17;
61.138.0.0/17;
61.138.128.0/18;
61.139.128.0/18;
61.148.0.0/15;
61.156.0.0/16;
61.158.0.0/16;
61.159.0.0/18;
61.161.0.0/18;
61.161.128.0/17;
61.162.0.0/16;
61.163.0.0/16;
61.167.0.0/16;
61.168.0.0/16;
61.176.0.0/16;
61.179.0.0/16;
61.180.128.0/17;
61.181.0.0/16;
61.182.0.0/16;
61.189.0.0/17;
125.32.0.0/16;
125.40.0.0/13;
202.96.0.0/18;
202.96.64.0/21;
202.96.72.0/21;
202.97.128.0/18;
202.97.224.0/21;
202.97.240.0/20;
202.98.0.0/21;
202.98.8.0/21;
202.99.64.0/19;
202.99.96.0/21;
202.99.128.0/19;
202.99.160.0/21;
202.99.168.0/21;
202.99.176.0/20;
202.99.208.0/20;
202.99.224.0/21;
202.99.232.0/21;
202.99.240.0/20;
202.102.128.0/21;
202.102.224.0/21;
202.102.232.0/21;
202.106.0.0/16;
202.107.0.0/17;
202.108.0.0/16;
202.110.0.0/17;
202.111.128.0/18;
203.93.8.0/24;
203.93.192.0/18;
210.13.128.0/17;
210.14.160.0/19;
210.14.192.0/19;
210.15.32.0/19;
210.15.96.0/19;
210.15.128.0/18;
210.16.128.0/18;
210.21.0.0/16;
210.51.0.0/16;
210.52.128.0/17;
210.53.0.0/17;
210.53.128.0/17;
210.74.96.0/19;
210.74.128.0/19;
210.82.0.0/15;
211.152.0.0/13;
218.7.0.0/16;
218.8.0.0/14;
218.12.0.0/16;
218.21.128.0/17;
218.24.0.0/14;
218.28.0.0/15;
218.56.0.0/14;
218.60.0.0/15;
218.62.0.0/17;
218.67.128.0/17;
218.68.0.0/15;
218.104.0.0/14;
219.154.0.0/15;
219.156.0.0/15;
219.158.0.0/17;
219.158.128.0/17;
219.159.0.0/18;
221.0.0.0/15;
221.2.0.0/16;
221.3.0.0/17;
221.3.128.0/17;
221.4.0.0/16;
221.5.0.0/17;
221.5.128.0/17;
221.6.0.0/16;
221.7.0.0/19;
221.7.32.0/19;
221.7.64.0/19;
221.7.96.0/19;
221.7.128.0/17;
221.8.0.0/15;
221.10.0.0/16;
221.11.0.0/17;
221.11.128.0/18;
221.11.192.0/19;
221.12.0.0/17;
221.12.128.0/18;
221.13.0.0/18;
221.13.64.0/19;
221.13.96.0/19;
221.13.128.0/17;
221.14.0.0/15;
221.192.0.0/15;
221.194.0.0/16;
221.195.0.0/16;
221.196.0.0/15;
221.198.0.0/16;
221.199.0.0/19;
221.199.32.0/20;
221.199.128.0/18;
221.199.192.0/20;
221.200.0.0/14;
221.204.0.0/15;
221.206.0.0/16;
221.207.0.0/18;
221.207.64.0/18;
221.207.128.0/17;
221.208.0.0/14;
221.212.0.0/16;
221.213.0.0/16;
221.216.0.0/13;
220.252.0.0/16;
222.128.0.0/14;
222.132.0.0/14;
222.136.0.0/13;
222.160.0.0/15;
222.162.0.0/16;
222.163.0.0/19;
222.163.32.0/19;
222.163.64.0/18;
222.163.128.0/17;
219.235.56.194;

论坛徽章:
0
2 [报告]
发表于 2007-05-10 21:49 |只看该作者
小弟愚笨,不懂你说的什么意思。

论坛徽章:
0
3 [报告]
发表于 2007-05-10 21:56 |只看该作者
cnc的ip列表是带有掩码的,想把从浏览器取得的客户端ip跟这个列表匹配看是否是网通的ip地址
谢谢

论坛徽章:
0
4 [报告]
发表于 2007-05-10 23:47 |只看该作者
不太会用perl 模块, 手写了一个...应该可以用的

1. 用cnc的ip存在 cnc.ip 文件.
2. 从标准输入读取要进行验证的ip地址. 没有任何健壮性检查.
3. 根据perl位置调整#!


  1. #!/perl/bin/perl -w
  2. use strict;

  3. my %cnc;

  4. open CONFIG, "< cnc.ip";

  5. while (<CONFIG>)
  6. {
  7.         chomp;
  8.         s/;//;
  9.         if (/\//)
  10.         {
  11.                 my @part = split /\//;
  12.                 my @ip = split /\./, $part[0];
  13.                 my $ip = ($ip[0] << 24) + ($ip[1] << 16) + ($ip[2] << 8) + $ip[3
  14. ];
  15.                 $cnc{$ip} = $part[1];
  16.         }
  17.         else
  18.         {
  19.                 my @ip = split /\./;
  20.                 my $ip = ($ip[0] << 24) + ($ip[1] << 16) + ($ip[2] << 8) + $ip[3
  21. ];
  22.                 $cnc{$ip} = 32;
  23.         }
  24. }

  25. close CONFIG;

  26. while (<>)
  27. {
  28.         chomp;
  29.         my @ip = split /\./;
  30.         my $ip = ($ip[0] << 24) + ($ip[1] << 16) + ($ip[2] << 8) + $ip[3];
  31.         my $find = 0;
  32.         foreach (keys %cnc)
  33.         {
  34.                 my $mask = ~ 0;
  35.                 $mask = $cnc{$_} != 32 ? $mask >> $cnc{$_} : 0;
  36.                 $mask = ~ $mask;
  37.                 my $tmp_ip = $ip & $mask;
  38.                 $find = 1 if $_ == $tmp_ip;
  39.         }
  40.         printf("%s\n", $find == 1 ? "ok" : "err");
  41. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2007-05-11 00:13 |只看该作者
多谢多谢

论坛徽章:
0
6 [报告]
发表于 2007-05-11 07:11 |只看该作者
好像有点问题呀,测试的结果是

mail# echo 218.28.233.3 | ./checkcnc
err
这个地址包含在了218.28.0.0/15

mail# echo 192.168.0.23 | ./checkcnc
err
这个地址没有在列表里


mail# echo 219.235.56.194 | ./checkcnc
ok
这个地址在列表里是单独的ip,正常


哪个地方出了问题,是我的测试方法有问题么?

论坛徽章:
0
7 [报告]
发表于 2007-05-11 07:36 |只看该作者
.....我这里.......的结果:
晕了~~


  1. Eden@EDENPAD ~
  2. $ echo '218.28.233.3' | v_ip.sh
  3. ok

  4. Eden@EDENPAD ~
  5. $ echo '192.168.0.23' | v_ip.sh
  6. err

  7. Eden@EDENPAD ~
  8. $ echo '218.30.233.3' | v_ip.sh
  9. err
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-05-11 07:51 |只看该作者
我用的是freebsd 6。2是不是不兼容,perl不是跨平台的么?

论坛徽章:
0
9 [报告]
发表于 2007-05-11 07:57 |只看该作者
原帖由 wildgoose 于 2007-5-11 07:51 发表
我用的是freebsd 6。2是不是不兼容,perl不是跨平台的么?


1.是不是没有正确加入到cnc.ip???下面看看
fgrep '218.28.0.0' cnc.ip

2.试试这个平凡测试....
echo '218.28.0.0' | ./check

论坛徽章:
0
10 [报告]
发表于 2007-05-11 08:00 |只看该作者
cnc.ip文件正确
下面的测试通不过
您可以ssh到我的系统上 密码和账户已经跟你站内短信了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP