加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用perl获取linux,unix,windows平台ip的程序

发布时间:2020-12-15 21:04:02 所属栏目:大数据 来源:网络整理
导读:#/perl/bin/perl use warnings; use strict; use Socket; use Sys::Hostname; sub get_serip() { my $host = hostname(); my $name; my $aliases; my $type; my $len; my @thisaddr; my $ip; ( $name,$aliases,$type,$len,@thisaddr ) = gethostbyname($host
#/perl/bin/perl
use warnings;
use strict;
use Socket;
use Sys::Hostname;
sub get_serip() {
my $host = hostname();
my $name;
my $aliases;
my $type;
my $len;
my @thisaddr;
my $ip;
( $name,$aliases,$type,$len,@thisaddr ) = gethostbyname($host);
foreach (@thisaddr) {
$ip = inet_ntoa($_);
}
return $ip;
}

print &get_serip();

上面这个是跨平台的,但是要安装额外的perl模块,不过一般版本稍高些的perl都已经安装了。

下面这个是用linux的命令ifconfig,然后借助郑则表示获取ip的程序,程序的功能要强大些

use warnings; use strict; my $ser_ip; my @output = `ifconfig 2>&1`; foreach (@output) { if (/^s*inet addr:([d.]*)s*Bcast:([d.]*)s*Mask:([d.]*)/) { $ser_ip = $1; } } #################功能复杂 #!/usr/bin/perl use strict; #use warnings; #筛选出非内网的ip my @ip; open (IN,"/sbin/ifconfig |"); while (<IN>) { ? ? if ( /^s*inet addr:([d.]*)s*Bcast:([d.]*)s*Mask:([d.]*)/ ) { ? ? ? ? if ( ( $1 !~ /(^192.168.[d.]*)/ ) && ( $1 !~ /(^10.[d.]*)/ ) && ( $1 !~ /(^172.(16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31).[d.]*)/ ) ) { ? ? ? ? ? ? push @ip,$1; ? ? ? ? ? ? } ? ? } } close(IN); #过滤重复ip @ip=sort @ip; my %count=(); my @ip = grep {++$count{$_} < 2} @ip; if ($#ip > 0) { ? ? my $k=1; ? ? for(my $i=0;$i<=$#ip;$i++) { ? ? ? ?# my($j1,$j2,$j3,$j4)=(); ? ? ? ?# my($k1,$k2,$k3,$k4)=(); ? ? ? ?my ($j1,$j4)=split /./,$ip[$i]; ? ? ? ?my ($k1,$k4)=split /./,$ip[$k]; ? ? ? ? if ( $j1 ne $k1 ) { ? ? ? ? ? ? last; ? ? ? ? } ? ? ? ? if ( ($j1 eq $k1) && ($j2 eq $k2) ) { ? ? ? ? ? ? shift @ip; ? ? ? ? } ? ? $k++; ? ? } } #如果ip只有1个就直接上报 if ($#ip == 0 ) { ? ? foreach my $tmp(@ip){ ? ? print "$tmp "; ? ? exit 0; ? ? } } # ? ? ? ? ? ?@ip=($ip[1],$ip[0]); #如果ip有2个,进行排序,先网通,后电信. if ($#ip == 1 ) { ? ? my $ip1=readpipe("whois $ip[0]@whois.apnic.net | sed -e '/./{H;$!d;}' -e ?'x;/netnum/!d' |grep ^netname | awk '{print $2}'|awk -F- '{print $1}'"); ? ? my $ip2=readpipe("whois $ip[1]@whois.apnic.net | sed -e '/./{H;$!d;}' -e ?'x;/netnum/!d' |grep ^netname | awk '{print $2}'|awk -F- '{print $1}'"); ? ? chomp($ip1); ? ? chomp($ip2); ? ? #print $ip1,"n"; ? ? #print $ip2,"n"; ? ? if ( ?($ip1 =~ /CHINATELECOM/) || ($ip1 =~ /CHINANET/) || ?($ip2 =~ /CNC/) || ($ip2 =~ /CNCGROUP/) || ($ip2 =~ /UNICOM/) ) { ? ? ? ? #print "1 normal double linen"; ? ? ? ? @ip=($ip[1],$ip[0]); ? ? ? ? } ? ? if ( ( ($ip1 =~ /CNC/) || ($ip1 =~ /CNCGROUP/) || ($ip1 =~ /UNICOM/) ) && ( ($ip2 =~ /CNC/) || ($ip2 =~ /CNCGROUP/) || ($ip2 =~ /UNICOM/) ) ) { ? ? ? ? #print "2 double cnc linen"; ? ? ? ? @ip=(); ? ? ? ? } ? ? if ( ( ($ip1 =~ /CHINATELECOM/) || ($ip1 =~ /CHINANET/) ) && ( ($ip2 =~ /CHINATELECOM/) || ($ip2 =~ /CHINANET/) ) ) { ? ? ? ? #print "3 double tel linen"; ? ? ? ? @ip=(); ? ? ? ? } ? ? foreach my $tmp(@ip){ ? ? ? ? print "$tmp "; ? ? } ? ? exit 0; } #如果大于2个就退出. if ( $#ip >= 2 ) { ? ? @ip=(); ? ? die('@ip >= 2'); }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读