[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 メーリングリストの案内