• 締切済み

PerlでIPアドレスとサブネットマスクから計算

Perlを使用してIPアドレスとサブネットマスクから範囲内にあるIPアドレスを展開できるようにしたいです。 【例】 192.168.1.0 255.255.255.0の場合 ↓↓ 192.168.1.0 192.168.1.1 192.168.1.2    ・    ・    ・ 192.168.1.253 192.168.1.254 192.168.1.255 のような感じに展開できるようなものを作成したいと考えております。(サブネットマスクは様々です。) 何卒宜しくお願い致します。 なお、展開したいIPアドレス帯は1000個以上あります。ひとつのテキストファイルに一行にひとつのセットで記入されています。 【展開したいテキストファイル】 192.168.1.0 255.255.255.0 10.1.1.128 255.255.255.128 ・ ・ ・ 172.16.10.192 255.255.255.192 のように記入されています。 宜しくお願い致します。

  • Perl
  • 回答数2
  • ありがとう数0

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「一部の表現に誤りがありましたので訂正させていただきます」 って書いてるけど, 「ひとつのテキストファイルに一行にひとつづつIPアドレスが書かれています」 というなら最初の質問にあった「展開したいテキストファイル」そのものが間違ってるってことだよね. そして, この 「ひとつのテキストファイルに一行にひとつづつIPアドレスが書かれています」 が正しいなら何もする必要ないんじゃないの?

回答No.1

サブネットマスクがとびとびでないなら。以下、表示がくずれるので空白2文字を全角空白にしていることに注意。 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @ip_list1 = get_ip_list( '192.168.1.0', '255.255.255.0' ); print Dumper(\@ip_list1); my @ip_list2 = get_ip_list( '10.1.1.128', '255.255.255.128' ); print Dumper(\@ip_list2); sub get_ip_list {   my $net_var;   if ( $_[0] =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/ ) {     $net_var = ( $1 << 24 ) | ( $2 << 16 ) | ( $3 << 8 ) | $4;   }   else {     die $_[0], " is not network address\n";   }   my $mask_var;   if ( $_[1] =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/ ) {     $mask_var = ( $1 << 24 ) | ( $2 << 16 ) | ( $3 << 8 ) | $4;   }   else {     die $_[1], " is not net mask\n";   }   my $host_max = ( ~$mask_var ) & 0xFFFFFFFF;   my @ip_list = ();   for ( my $i = 0; $i <= $host_max; $i++ ) {     my $var = $net_var | $i;     my $ip_addr = sprintf '%d.%d.%d.%d', ( $var >> 24 ) & 0xFF,       ( $var >> 16 ) & 0xFF, ( $var >> 8 ) & 0xFF, $var & 0xFF;     push @ip_list, $ip_addr;   }   return @ip_list; }

yasaiumaiumai
質問者

補足

一部の表現に誤りがありましたので訂正させていただきます。 【誤】ひとつのテキストファイルに一行にひとつのセットで記入されています。 【正】ひとつのテキストファイルに一行にひとつづつIPアドレスが書かれています。 すなわちひとつのテキストファイルに1000個以上のIPアドレス帯が書かれています。 申し訳ございませんが、サブネットマスクはとびとびです。宜しくお願い致します。

関連するQ&A

  • IPアドレスのサブネットマスクの設定について教えてください。

    サブネットマスクの設定について教えてください。 【ネットワーク情報】 ・自分のホストがいるネットワーク(A)  10.4.0.0 255.255.0.0 (10.4.0.0/16) ・L3スイッチ  ネットワーク(A)は、VLAN40に属しています。  VLAN40 は、10.4.0.0/16 がIPアドレスの範囲です。  特にVLAN40 内ではアクセスコントロールはしていません。 上記ネットワーク上に、サーバーを立てました。 IPアドレスは、 10.4.255.30 で、MACアドレスにてDHCPサーバの予約で IPを配布しています。 念のため、サーバーにも手動でIPアドレスを振ろうと思っているのですが、 この場合のサブネットマスクは 255.255.255.0 で良いのでしょうか? それとも 255.255.0.0 にした方がよいのでしょうか? 255.255.255.0でサブネットマスクを設定しても、255.255.0.0 からアクセス出来る ような気がするのですが、どうなのでしょうか。 ご教授くださいますようお願い致します。

  • プライベートipアドレスのサブネットマスクについて

    プライベートipアドレスのサブネットマスクについてです。 そもそもプライベートipアドレスのサブネットマスクとipアドレスのサブネットマスクとの違いが分かりませんが、プライベートipアドレスのサブネットマスクはクラスA:255.0.0.0、クラスB:255.240.0.0、クラスC:255.255.255.0とならいましたがなぜクラスBは255.255.0.0ではないのでしょうか? これはまちがっているのでしょうか? よろしくお願いします。

  • IPアドレス、サブネットマスク について

    こんにちは^^ シスアドについてなのですが IPアドレス:192.168.1.18 サブネットマスク:255.255.255.240 の場合、 ネットワークアドレス:192.168.1.16 パソコンに割り当てられないIPアドレス:192.168.1.16と192.168.1.31 であってますでしょうか? よろしくお願いします♪

  • IPアドレスとサブネットマスクがわかりません

    WindowsXPでIPアドレスとサブネットマスクを知りたいのですが、どこに載っているのかわかりません。どなたか教えてもらえませんか?

  • 元のipアドレス、サブネットマスクを確認したい。

    ’次のipアドレスを使う’にipアドレス、サブネットマスクを入力していたが、自動的に取得に換えた為、ipアドレス、サブネットマスクがきえました。消えたipアドレス、サブネットマスクを確認する方法はありますか。

  • IPアドレスだけでサブネットマスクが無くても何故アクセスできる?

    例えばOKWave『http://okwave.jp』のIPアドレスは210.132.71.10ですが、何故IPアドレスだけでアクセスできるのか疑問を感じました。 理由はサブネットマスクが分からなければ、どこまでがネットワークアドレス部かわからないのに、どのようにルーティングされているかと思いました。どなたか、分かりやすくご教授お願い致します。

  • 同じサブネットに属するIPアドレス

    IPアドレスが192.168.1.34のPCと同じサブネットに属するIPアドレスはどこまでかを求めよ.ただしサブネットマスクは255.255.255.240が設定されているものとする. という問題が出たのですが,答えを聞いてもいまいちわかりませんでした. サブネットマスクの240の部分→11110000,よってホスト部が0000で14台. だから192.168.1.34の34+14で192.168.1.48までが同じサブネット,という考えでいいのでしょうか. 説明ではネットワークアドレスを求めていたようなのですが,求める必要があるのかがわかりません.

  • プライベートIPアドレスとサブネットマスク

    現在、4月の初級シスアドの試験に向けて勉強中です。 そこで、IPアドレスのことについて一つはっきり理解できないことが出てきたので、誰か教えて下さい。 IPアドレスには、全世界で一意のグローバルIPアドレスと、LAN内のみで通用するプライベートIPアドレスがある。 これは理解できます。だけど分からないのは、グローバルIPアドレスとプライベートIPアドレスとサブネットマスクの関係です。 僕は、今のところ、こう理解しています。 グローバルIPアドレスにサブネットマスクをかけることによって、プライベートIPアドレスを作り出すことが出来る。 僕の理解、これで合ってますか?

  • サブネットマスクについて

    今、Linuxでネットワーク設定を行っているのですが、 ifconfig eth0 172.30.3.49 netmask 255.255.192.0 コマンドすると正常な動作が行えません。 サブネットマスクが間違っているのでしょうか? IPアドレスからサブネットマスクが正常な値かどうかなど算出できるのでしょうか? サブネットマスクは、ネットワークアドレス部とホストアドレス部を判断するために IPアドレスとサブネットアドレスとのANDを取って ネットワークアドレス部とホストアドレス部を見極め るまではわかっています。 よろしくお願い致します。

  • グローバルIPアドレスとサブネット

    現在ネットワーク勉強中の者です。ISPがグローバルIPアドレスを振り出すときはネットワーク部(例:192.128.128.0)のみを振り出すのでしょうか。それともホスト部も含め(例:192.128.128.35)振り出すのでしょうか。 参考書にグローバルIPアドレスに255.255.224のサブネットマスクをかけて、サブネットワークを増やす例が載っていたのですが、仮に普通の企業でこれをやるとしたら、192.128.128.0の形でもらわないとできませんよね?それとも192.128.128.35の形でもらって、ISP自身がサブネット化してるのでしょうか?個人的には後者だと思うのですが。

専門家に質問してみよう