[PHP-users 24959] IPアドレスとネットマスク (Re: 携帯かパソ コンかだけを判別する なら?)
KOYAMA Tetsuji
koyama @ hoge.org
2005年 3月 18日 (金) 17:11:49 JST
小山です。
柳町さん:
> しかし、xxx.xxx.xxx.xxxまでは分かるのですが、/xxというのがいまいちど
> う扱えばいいのかよく分かりません。
/xx というのは IP アドレスのネットマスク長というものです。
http://www.atmarkit.co.jp/fwin2k/network/baswinlan007/baswinlan007_01.html
この辺を読んで、IP アドレスの構造について勉強されると良いと思います。
> 自分でやってみろと言われるのを覚悟で質問するのですが、
> $_SERVER["REMOTE_ADDR"]の値はどのように帰ってくるのですか?IPアド
> レスと、ビットを分けた配列ですか?それとも/以降も続けて帰ってくる文
> 字列ですか?
$_SERVER['REMOTE_ADDR'] には、接続元の IP アドレスが文字列で入ってい
ます。'61.120.50.162' の様な形ですね。
> 現在のところ、テキストファイルに保存してあるのですが、fgets()で一行
> 一アドレスにしておいて、==かどうかを判断すればいいのですよね?
この IP アドレスが xxx.xxx.xxx.xxx/xx 形式のネットワークアドレスに含
まれているかどうかを判断するには、単純な比較ではうまく行きません。ネッ
トワークアドレスの範囲も考慮して、含まれているかどうか見てやる必要があ
ります。
PEAR の Net_IPv4 パッケージを使うと、この辺の作業が簡単にできます。
<?php
require_once 'Net/IPv4.php';
$netaddress = '61.120.50.160/28';
$target_ip = '61.120.50.162';
$bad_ip = '61.120.50.180';
$valid = Net_IPv4::ipInNetwork($target_ip, $netaddress);
var_dump($valid);
$invalid = Net_IPv4::ipInNetwork($bad_ip, $netaddress);
var_dump($invalid);
?>
--
小山 哲志@ビート・クラフト
koyama @ beatcraft.com
koyama @ hoge.org
PHP-users メーリングリストの案内