2017-09-18 24 views
0

私はIPアドレスでnslookupを実行する必要があります。一致する場合は、ホストの名前を印刷する必要があります。問題は、コマンド実行時にIPアドレスが逆になってしまうことです。perlを使用してLinuxでIPアドレスを反転する

nslookup 10.11.12.13 
13.12.11.10.in-addr.arpa 

私は私が欲しいものではありませんすべてを逆転さreverseけどを使用しようとしました。

その後、私はすべて、ちょうど完全な数字を逆にしたくない 01.11.21.31 を印刷し
my $ip = '13.12.11.10'; 
$result = reverse($ip); 
print $result; 

誰かが助けてくれますか?

+0

逆のIPアドレスを分割して並べ替えます。 –

+0

'$ result = join"。 "、reverse split /[.]/、$ ip' –

+0

@уухой27ありがとうございます。 –

答えて

0

私たちがする必要があるのは、実際のアドレスを分割し、それらを逆順に並べ替えてから、そのIPを逆のIPに一致させることです。

use strict; 
use warnings; 

my $ipaddress = '10.11.12.13';  
my @ip = split /\./,$ipaddress;      #split the IP by . 
my $sserddapi = "$ip[3].$ip[2].$ip[1].$ip[0]";  #reverse it 
my @lookup = `nslookup $ipaddress`;     #do the match 
    $lookup[3] =~ s/\s+//g;       #remove all whitespace 
my @device = split /=/, $lookup[3];     #get the hostname 
    if ($lookup[3] =~ /^$sserddapi/) {    #see if it matches 
    $lookup[3] =~ s/$sserddapi.in-addr.arpaname=//g; #Remove the unwanted stuff 
    print "$ipaddress = $lookup[3]\n";    #print the result 
    } 
+0

お返事ありがとうございます –

+1

正規表現で '$ sserddapi'を補間する場所では、代わりに' \ Q $ sserddapi \ E'が必要です。そしてあなたの代わりに\が必要です。また、13.12.11.10の一致条件は、たとえば一致します。 13.12.11.101も、私は間違っていると推測している – ysth

1

は、単にそれを再度参加、結果の配列を逆に、splitを使用して. SにIPアドレスを分割:

join(".", reverse(split(/\./, $ip))) 

これは、あなたがそれから比較することができますIPアドレスを、「逆転」を与えます結果はnslookupになります。

+0

答えをありがとう。私はそれが私にも試合を与えたが正しいものとして他の1つをマークしたが、これは良いです。私は投票ができないと言いますが、私はまだ15の評判がないので、あなたの答えを投票することはできません。 –

関連する問題