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
のように記入されています。
宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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;
}
この回答への補足
一部の表現に誤りがありましたので訂正させていただきます。
【誤】ひとつのテキストファイルに一行にひとつのセットで記入されています。
【正】ひとつのテキストファイルに一行にひとつづつIPアドレスが書かれています。
すなわちひとつのテキストファイルに1000個以上のIPアドレス帯が書かれています。
申し訳ございませんが、サブネットマスクはとびとびです。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ファイアウォール IPアドレス 1 2022/06/24 19:46
- 固定IP iPhoneでのIPv4切り替え方法 3 2022/11/24 22:26
- ネットワーク IPアドレスの範囲ってどうやって求めるんですか? 2 2023/01/05 01:37
- その他(インターネット接続・インフラ) アプリ利用者を特定し、裁判に 2 2022/06/09 21:43
- VPN 接続のたびにIPが変わるVPNサービスが知りたい 2 2022/06/27 02:34
- 固定IP MACアドレスはLAN内で相手を特定するアドレスですか? PCから監視カメラを閲覧するときに、セグメ 3 2022/07/23 09:04
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- Visual Basic(VBA) VBA で エクスプロー操作 1 2023/05/31 16:13
- ツイキャス ツイキャスでアカウントロックされたとき、IPアドレスが自動取得で変更されても、PC端末が特定される? 1 2022/10/15 15:49
- サーバー ネットワークの構成に困っています 3 2023/07/05 11:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
perlで2次元配列をサブルーチ...
-
perlでリテラル値はメモリにど...
-
INDIRECT 横に再度抽出したい
-
Perl 重複カウント 上位3名
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
perlプログラミング 空白行削除
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
-
perlをバージョンアップしたら...
-
Perl の外部モジュールの利用方法
-
perl このテキストファイルを簡...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報