- ベストアンサー
マスク長をアドレスに変換するコード
例えば、ネットワークアドレスが192.168.0.1/24と与えられた場合に、マスク長の24を読み込んで、255.255.255.0を返すようなコードを作成したいのですが、任意のマスク長を与えて正しいアドレスを返すうまい方法が思いつきません。教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
便利な関数とかモジュールとかありそうな気がするんですが、見つけられなかったのでガリガリ書いてみました。 sub get_subnet_mask { my ($network_addr) = @_; my $mask_bits = (split '/', $network_addr)[1]; my $mask = -1 << (32-$mask_bits); return join '.', unpack "CCCC", pack "N", $mask; } print get_subnet_mask('192.168.0.1/24'); # 255.255.255.0 ※インデントに全角空白を使っているので、コピーする場合はタブなどに置き換えてください。
その他の回答 (3)
- leaz024
- ベストアンサー率75% (398/526)
やっぱりありましたね、便利なモジュール^^;>No.3 というわけで、これらをインストールして使いましょう。 # 無いわけ無いだろうと思ってたんですよね・・・
- zebedeer
- ベストアンサー率66% (80/121)
>便利な関数とかモジュール この辺でしょうか? (もちろんmask、nerwork、broadcastもOK) http://search.cpan.org/~frajulac/Net-IPv8Adddr-0.08/IPv4Addr.pm http://search.cpan.org/~muir/Net-Netmask-1.9011/Netmask.pod
- nota55
- ベストアンサー率37% (138/366)
Perlはアレなんですけど,マスク長の「24」が何かっつーと, 「全体で32bitのうち先頭から24bitが1だよん」って事 なんで,そこから考えれば? ・32bitのうち,与えられたbit数だけ先頭から1にする ・8桁毎に10進数に変換する とかそんな感じの力技でもいけそうな気が。
お礼
いつもありがとうございます。 ただ、高度すぎていまいちわかってませんが・・・ ネットワークアドレスとブロードキャストアドレスを求めるコードも教えていただけるとうれしいです。 もし、よければお願いします。勝手なお願いですが・・・・