• ベストアンサー

マスク長をアドレスに変換するコード

例えば、ネットワークアドレスが192.168.0.1/24と与えられた場合に、マスク長の24を読み込んで、255.255.255.0を返すようなコードを作成したいのですが、任意のマスク長を与えて正しいアドレスを返すうまい方法が思いつきません。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

便利な関数とかモジュールとかありそうな気がするんですが、見つけられなかったのでガリガリ書いてみました。 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 ※インデントに全角空白を使っているので、コピーする場合はタブなどに置き換えてください。

tomoremo
質問者

お礼

いつもありがとうございます。 ただ、高度すぎていまいちわかってませんが・・・ ネットワークアドレスとブロードキャストアドレスを求めるコードも教えていただけるとうれしいです。 もし、よければお願いします。勝手なお願いですが・・・・

その他の回答 (3)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

やっぱりありましたね、便利なモジュール^^;>No.3 というわけで、これらをインストールして使いましょう。 # 無いわけ無いだろうと思ってたんですよね・・・

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.3

>便利な関数とかモジュール この辺でしょうか? (もちろん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)
回答No.1

Perlはアレなんですけど,マスク長の「24」が何かっつーと, 「全体で32bitのうち先頭から24bitが1だよん」って事 なんで,そこから考えれば? ・32bitのうち,与えられたbit数だけ先頭から1にする ・8桁毎に10進数に変換する とかそんな感じの力技でもいけそうな気が。

関連するQ&A