免费注册 查看新帖 |

Chinaunix

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

请教大神,如何判断客户端IP是否属于内网IP范围 [复制链接]

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
11 [报告]
发表于 2012-12-11 16:45 |只看该作者
本帖最后由 mcshell 于 2012-12-11 16:45 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5. my %hash;
  6. while(<DATA>){
  7.     chomp;
  8.     my($ip,$netmask)=split/\//;
  9.     my $ipbit = unpack("B32",pack("C4", (split/\./,$ip)));
  10.     my $net = substr("$ipbit",0,"$netmask");
  11.     push @{$hash{$net}}, $ip,$netmask;
  12. }
  13. #print Dumper \%hash;
  14. my @testip=qw{192.168.1.5 219.111.193.1 };
  15. foreach my $kipbit (keys %hash){
  16.     my $netmask = $hash{$kipbit}[1];
  17.     my $netip = $hash{$kipbit}[0];
  18.       foreach my $testkip (@testip){
  19.             my $testipbit = unpack("B32",pack("C4", (split/\./,$testkip))); #C4转化为char类型的数据类型,C4也可以写作CCCC,B32将IP地址转化为32位的bit。
  20.              $testipbit = substr("$testipbit",0,"$netmask");
  21.             if($kipbit == $testipbit){
  22.                 print "$netip/$netmask\n";
  23.             }
  24.       }
  25. }
  26. __DATA__
  27. 192.168.0.0/16
  28. 219.111.192.0/18
  29. 68.132.0.0/17
  30. 61.135.0.0/16
  31. 192.162.0.0/16
  32. 152.172.0.0/16
  33. 34.132.0.0/14
  34. 97.208.0.0/13
复制代码

论坛徽章:
2
技术图书徽章
日期:2013-10-30 14:37:252015年亚洲杯之伊朗
日期:2015-04-30 13:37:02
12 [报告]
发表于 2012-12-11 16:52 |只看该作者
回复 1# flutter


    汗,俺的贴子咋上2楼了。以前学过这些,看了你的贴之后,花了1,2小时,总算是掌握,再回答你的问题。谢谢你的分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP