URN Logo
UNIX Resources » Linux » China Linux Forum » Perl 编 程 » 5 » 求一段比较ip地址范围的perl代码
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
求一段比较ip地址范围的perl代码
求一段比较ip地址范围的perl代码 - uiqssqiu [2004-06-02 13:49 | 664 byte(s)]
 
Re: 求一段比较ip地址范围的perl代码 - Viperii [2004-06-02 18:55 | 327 byte(s)]
 
Re: 求一段比较ip地址范围的perl代码 - uiqssqiu [2004-06-02 19:13 | 251 byte(s)]
 
Re: 求一段比较ip地址范围的perl代码 - wandys [2004-06-02 21:59 | 551 byte(s)]
 
 
Re: 求一段比较ip地址范围的perl代码 - wandys [2004-06-03 18:11 | 885 byte(s)]
 
Re: 求一段比较ip地址范围的perl代码 - uiqssqiu [2004-06-03 09:22 | 806 byte(s)]
 
Re: 求一段比较ip地址范围的perl代码 - xyb [2004-06-03 16:12 | 197 byte(s)]
 
 
Re: 求一段比较ip地址范围的perl代码 - uiqssqiu [2004-06-02 19:22 | 192 byte(s)]
 
Re:help!!! - uiqssqiu [2004-06-02 19:30 | 108 byte(s)]
 
Re:help!!! - redcandle [2004-06-02 20:26 | 276 byte(s)]
 
Re:help!!! - Viperii [2004-06-02 19:54 | 77 byte(s)]
 
 
Subject: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-02 13:49    Length: 664 byte(s)
[Original] [Print] [Top]
哪位GG帮我完成一段比较ip地址范围的代码吗?小弟不会写perl程序,请达人指点。

要求是这样的:(不知道下面的per语法对不对,我只是描述一下是怎么回事)

my $begin = "192.168.1.1";
my $end = "192.168.2.255";
my $ip = "192.168.1.11";

要写一个函数比较$ip是否属于"从192.168.1.11到192.168.2.255"这个地址范围。
函数可以这样写:先把ip地址转换为32位的整数,也就是192.168.1.1变成16进制的
C0.A8.01.01也就是0xc0a80101,把192.168.2.255变成 0xc0a802ff,接着比较 $ip跟这两个16进制数的大小就行了,很简单的一个perl程序,请哪位帮我写一下,本人不懂perl的语法。
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-02 14:42    Length: 32 byte(s)
[Original] [Print] [Top]
为什么这么冷清啊,人都到哪去了???
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: Viperii    Posted: 2004-06-02 18:55    Length: 327 byte(s)
[Original] [Print] [Top]
@sec = split(/./, $ip);

if ($sec[0] ne "192" || $sec[1] ne "168") {
print "bad ip ";
} elsif($sec[2] eq "1" || $sec[2] eq "2") {
print "ip OK ";
} else {
print "bad ip ";
}
----
Where is the RED pill? I want OUT!
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-02 19:13    Length: 251 byte(s)
[Original] [Print] [Top]
是比较范围,不是比较相不相等,楼上贴的代码不符合要求吧.
只能先转化为32位整数再来比较,如果把ip地址split成四个整数比较的话很麻烦会出问题的,因为我们在C程序中比较时都是先转化成32位整数再比较的,哪位能帮忙用perl写一下吗,谢谢先~~

----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: Viperii    Posted: 2004-06-02 19:15    Length: 13 byte(s)
[Original] [Print] [Top]
会出什么问题?
----
Where is the RED pill? I want OUT!
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-02 19:22    Length: 192 byte(s)
[Original] [Print] [Top]
是这样的:
假如要比较192.168.1.250是不是属于192.168.1.1到192.168.2.1的范围,
如果你要split成四个整数比较,那么250这个数是大于192.168.2.1中的1,这样就比较失败啦!不知我说明白没有
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re:help!!!
Author: uiqssqiu    Posted: 2004-06-02 19:30    Length: 108 byte(s)
[Original] [Print] [Top]
楼上的在吗?
就用我说的方法帮忙写一下呀,实话告诉你,ip地址只能这样比较,你如果有别的方法我们来讨论一下
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re:help!!!
Author: Viperii    Posted: 2004-06-02 19:54    Length: 77 byte(s)
[Original] [Print] [Top]
我写的只检查了C类,和250有什么关系?如果你先要检查ip有效性,网上搜一下多的是.
----
Where is the RED pill? I want OUT!
[Original] [Print] [Top]
Subject: Re:help!!!
Author: redcandle    Posted: 2004-06-02 20:26    Length: 276 byte(s)
[Original] [Print] [Top]

my $ip="192.168.2.233";
$ip=~m" d+ . d+ . (d+) . (d+)"x;
if ( ( $1==1 and $2>=11 ) or ($1==2 and $2<=255) ) {
print "good ip";
}

[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: wandys    Posted: 2004-06-02 21:59    Length: 551 byte(s)
[Original] [Print] [Top]

#!/usr/bin/perl -w
use strict;
use Socket;

my $min = unpack("N", inet_aton("192.168.1.1"));
my $max = unpack("N", inet_aton("192.168.2.255"));
my $ip = unpack("N", inet_aton("192.168.2.34"));

if ($ip >= $min && $ip <= $max) {
print "Valid ";
} else {
print "Invalid ";
}

----
UN*X is user^H^H^H^Hfriend-friendly.
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-03 08:40    Length: 64 byte(s)
[Original] [Print] [Top]
可不可以不用inet_aton这些库函数啊,我机器上没这些库。程序不能运行
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: uiqssqiu    Posted: 2004-06-03 09:22    Length: 806 byte(s)
[Original] [Print] [Top]
自己研究了一下,这个样子就行了:

#!/usr/bin/perl
my $begin = "192.168.3.25";
my $end = "192.168.2.1";
my $ip = "192.168.1.250";
my $b, $e, $i;
@sec = split(/./, $begin);
$b = sprintf("0x%02x%02x%02x%02x", $sec[0], $sec[1],$sec[2],$sec[3]);
@sec = split(/./, $end);
$e = sprintf("0x%02x%02x%02x%02x", $sec[0], $sec[1],$sec[2],$sec[3]);
@sec = split(/./, $ip);
$i = sprintf("0x%02x%02x%02x%02x", $sec[0], $sec[1],$sec[2],$sec[3]);
print "$i $b $e ";

if ($i ge $b && $e ge $i) {
print "Valid ";
} else {
print "Invalid ";
}
----
我是超级MM,我爱张飞、关羽、鲁智深。。。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: xyb    Posted: 2004-06-03 16:12    Length: 197 byte(s)
[Original] [Print] [Top]
看起来就象我在python里的代码 我也是先把所有 ip 整理成 010.120.003.000 这样子的字符串形式,然后进行字符串的比较的。
[Original] [Print] [Top]
Subject: Re: 求一段比较ip地址范围的perl代码
Author: wandys    Posted: 2004-06-03 18:11    Length: 885 byte(s)
[Original] [Print] [Top]
In reply to:


可不可以不用inet_aton这些库函数啊,我机器上没这些库.





#!/usr/bin/perl -w

use strict;

sub address {
my ($a, $b, $c, $d) = split (/./, $_[0]);
return $a << 24 | $b << 16 | $c << 8 | $d;
}

my $min = address("192.168.1.1");
my $max = address("192.168.2.255");
my $ip = address("192.168.2.34");

if ($ip >= $min && $ip <= $max) {
print "Valid ";
} else {
print "Invalid ";
}

----
UN*X is user^H^H^H^Hfriend-friendly.
[Original] [Print] [Top]
« Previous thread
老友们还在吗?我回来了!
Perl 编 程
5
Next thread »
[请教] 如何改名件名?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:09:04, cost 0.06443190574646 ms.