getnetent

ネットワーク情報を走査する

構文

解説

getnetent はシステムのネットワークデータベース(Linux では主に /etc/networks に登録されている情報)にアクセスし、 ネットワーク情報を返します。引数はありません。

#    0      1         2          3
my ( $name, $aliases, $addrtype, $net ) = getnetent;
No. 変数 意味 実例
0 $name ネットワーク名 link-local
1 $aliases エイリアス (別名)
2 $addrtype アドレスタイプ(アドレスファミリー)(Linux なら 2: IPv4, 10: IPv6) 2 (IPv4)
3 $net ネットワークアドレス 2851995648 (169.254.0.0)

getnetent はイテレーターとして機能しますので、一般的には while ループで使われます。 以下のサンプルコードは、ネットワーク名を一覧出力します。

while ( my @info = getnetent ) {
    print $info[0], "\n";
}

getnetent はスカラーコンテキストであれば、最初の項目であるネットワーク名のみを返します。 そのため、前述のサンプルコードは次のように書き換えても同じです。

while ( my $name = getnetent ) {
    print $name, "\n";
}

$net のネットワークアドレスは、4 バイトの IP アドレスを数値として表現したものです。 正確に言うと、ネットワークバイトオーダー(ビッグエンディアン)の符号なし 32 ビット整数 (unsigned long) です。 そのため、packunpack を使って文字列に変換します。

while ( my ( $name, $aliases, $addrtype, $net ) = getnetent ) {
    my $addr = join( '.', unpack( 'C4', pack( 'N', $net ) ) ); # 数値表現の IP アドレスを文字列に変換
    print $name, ' (', $addr, ")\n"; # link-local (169.254.0.0)
}

なお、getnetent は Windows では機能しませんので注意してください。