私はこれに似たようなことをしたいと思っています: PHP 5 で IP を CIDR マスクに一致させますか?
ただし、許可されていない IP/マスクのリストを MySQL テーブルに保存し、一致を確認したいと考えています。
リンクの例と同じように、「10.2.0.0/16」のようなものがテーブルの行になり、現在のユーザーの IP アドレス ($_SERVER['REMOTE_ADDR']) を確認して、一致するかどうか。
どうもありがとう :)
私はこれに似たようなことをしたいと思っています: PHP 5 で IP を CIDR マスクに一致させますか?
ただし、許可されていない IP/マスクのリストを MySQL テーブルに保存し、一致を確認したいと考えています。
リンクの例と同じように、「10.2.0.0/16」のようなものがテーブルの行になり、現在のユーザーの IP アドレス ($_SERVER['REMOTE_ADDR']) を確認して、一致するかどうか。
どうもありがとう :)
テーブルのいくつかのオプション-IPを人間が読める文字列(4ドットバイト)として、またはcidr_matchが使用するネイティブの長い数値として保存できます。cidr_match
人間が読める形式(リンクされたページから再利用するため)に固執していると仮定します
function testIP($ip=$_SERVER['REMOTE_ADDR']) {
//Returns TRUE - valid, FALSE - denied
/* Get the data from the database and return it in rows
* this could be real-time retrieved, or pulled into an array
* first
* assumes: deny_ranges(ip VARCHAR(45) not null,mask INT not null default 0)
* eg: $denyips= get "SELECT ip,mask FROM deny_ranges" from database
*/
foreach($denyips as $row) {
if ($row["mask"]==0) {
//No need to use overhead of CIDR_MATCH
//Exact match - reject
if ($row["ip"]==$ip) return false;
} elseif (cidr_match($ip,$row["ip"]."/".$row["mask"])==true) {
//In denied range - reject
return false;
}
}
//Got through all rejected ranges+ips - it's good
return true;
}
cird_match
(他の投稿で見つけることができます)
の php.net ドキュメントにip2long()
は、コメントに動作するコードの良い例があります: http://www.php.net/manual/en/function.ip2long.php#86793