• 締切済み

PHPによるIPアドレスマッチ

こんにちは。現在、掲示板などに使うアクセス制限ライブラリを作っています。 やりたいことは、制限したいIPアドレスのリストを作り、そのリストの中に接続元のIPが含まれているかどうかを調べたいのです。 制限したいIPアドレスのリストには、IPアドレスの範囲表現(?)を使うことができるようにしたいと考えています。 例: $deny[0] = 'xxx.11.11.11'; $deny[1] = 'xxx.11.22.33'; $deny[2] = 'xxx.11.33.*'; 上記の「*」のようにです。 ここで、 $ip = 'xxx.11.33.12'; が、$denyに含まれているかどうかを調べたいのです。 正規表現を使うのかとも考えましたが、なかなか理解できません。 もし、お分かりになりましたら回答よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

多分こんな感じではないかと。。。 if(preg_match ("/xxx\.11\.33\.\d*/i", $ip)) { #ふくまれてる } else { #ふくまれてない }

参考URL:
http://www2.famille.ne.jp/~akio1998/l_grep.html
fly1435
質問者

お礼

ありがとうございます。参考になりました。 ============================================= $deny[0] = '11.11.11.11'; $deny[1] = '11.11.22.33'; $deny[2] = '11.11.33.*'; $ip = '11.11.33.4'; foreach ($deny as $value) { $str = str_replace('*', '\d*', $value); if(preg_match ('/'.$str.'/i', $ip)) { #ふくまれている } else { #ふくまれてない } } ============================================= としたところ、「11.11.33.*」のみがマッチすることを確認しました。自分は正規表現の基礎から勉強する必要がありますね^_^; URLも参考になります。 ありがとうございました。

関連するQ&A

  • IPアドレスがちがう!

    プライベートなサイトの公開範囲を特定のIPアドレス(自分)だけにしようと.htaccessで order deny,allow deny from all allow from xxx.xxx.xxx.xxx allow from xxx.xxx.xxx.xxx allow from xxx.xxx.xxx.xxx というふうにしていたのですが、仕事場のPC(IPアドレス)だけ許可できません。 で調べてみると、「ipconfig/all」で得られたIPアドレスとPHPの「$_SERVER['REMOTE_ADDR']」で得られたIPアドレス(実際にサーバーにアクセスしてきたクライアント)が違うのです。 なでに(.ŏωŏ.)? 結局、「$_SERVER['REMOTE_ADDR']」で得られたIPアドレスで無事制御できましたが、原因は分からずじまいです。 どなたか原因がお分かりの方、ご教授の程お願い致します。 OS: WindowsXP SP3 仕事場のPCは無線LANで接続されています。

  • ApacheのIP制限について

    ApacheのIP制限について CentOS5とWindowsVista両方のOSでApacheの勉強をしている者です。 ApacheのバージョンはWindowsVistaなら2.0.63で、CentOS5は2.2のを試しています。 ところで、「特定のアクセス元に対してアクセスを禁止する」の部分ですが、 ------------------- Order allow,deny Allow from all Deny from xxx.xxx.xxx.xxx ------------------- の部分にxxx.xxx.xxx.xxxを WindowsVistaでは、192.168.1.28といったapacheをインストールしている本機マシンをアクセス制限に試してみようと思いましたが、うまくいきません。 また、友だちのサーバのCentOS5で、私の契約しているプロバイダーのIPをアクセス制限しようと思いましたが、それでも上手くいきませんでした。 CentOSの方には色々と試してみて、mod_access.soをインストールしてみましたが、それでもうまくいきません。 ただし、逆に ------------------- Order deny,allow Deny from all ------------------- を指定すると正常にアクセス制限することはできますが、私が望んでいることは特定のIPに対してアクセス制限をかける方法を知りたいのです。 何かお分かりの方は、ご回答をお願いします。

  • htaccess:制限IPのうち特定のIPのみ許可

    .htaccessで、 order allow,deny allow from all deny from deny from 118.243.0.0/16 のようにネットマスクを利用して複数のIPアドレスからのアクセスを制限した上で、そのうち(制限したIPアドレスに含まれるうち)の一つのIPアドレス (例:118.243.126.243)にのみアクセスを許可したい場合、.htaccessに具体的にどのように記述すればよいのでしょうか? どのように記述するか分からないのですが、118.243.126.243をとばした「118.243.0.0から118.243.126.242」と「118.243.126.244から118.243.255.255」を別々に制限すればよいように思います。ただし、記述の仕方が分からないので教えてください。 よろしくお願いします。

  • .htaccessでIPアドレス拒絶後、一部許可

    .htaccessを利用して「192.168.0.0/16」のIPアドレスの範囲のアクセスを拒絶し、かつ、拒絶したIPアドレスの範囲のうち「192.168.240.29」のみのアクセスを許可したいとします。 以下のように記述したのですが、「192.168.240.29」も含め「192.168.0.0/16」のIPアドレスの範囲全体が拒絶されてしまいます。 order allow,deny allow from all deny from 192.168.0.0/16 allow from 192.168.240.29 「192.168.0.0/16」のIPアドレスの範囲のアクセスを拒絶後に「192.168.240.29」のみのアクセスを許可するにはどのように記述すればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • IPアドレスのドメインを調べたいです

    xxx.xxx.xxx.xxxのアドレスからアクセスがあり、nslookupで調べると  Non-existent domain が返ってきて、DNSに未登録のホストからのアクセスのようです。 IPアドレスの範囲から割り当てられているドメインを知ることは可能でしょうか。 また地域、国名を知ることはできますでしょうか。 ネットワークに詳しい方、よろしくお願いします。

  • 難易度高htaccess:IPの許可

    .htaccessで、 order allow,deny allow from all deny from deny from 118.243.0.0/16 のようにネットマスクを利用して複数のIPアドレスからのアクセスを制限した上で、そのうち(制限したIPアドレスに含まれるうち)の一つのIPアドレス (例:118.243.126.243)にのみアクセスを許可したい場合、.htaccessに具体的にどのように記述すればよいのでしょうか? どのように記述するか分からないのですが、118.243.126.243をとばした「118.243.0.0から118.243.126.242」と 「118.243.126.244から118.243.255.255」を別々に制限すればよいように思います。ただし、記述の仕方が分からないので具体的な記述の仕方を教えてください。 この.htaccessでは、基本的に「118.243.0.0/16」以外のIPアドレスからのアクセスは全て許可し、かつ、「118.243.0.0/16」に含まれる118.243.126.243からのアクセスも許可したいのです。 質問が分かりにくい場合は、お聞き下さい。

  • IPアドレス(2)

    以前IPアドレスの事で質問させていただいたんですが またつまづいてしまいご助言願いたいと思いました。 現在使用しているグローバルIPが・・・ クラスBで、128.10.xxx.xxx の通りです そしてLANに繋いでる各端末に割当てている プライベートIPも128.10.xxx.xxxですが クラスBで割振るプライベートIPは 172.16.0.0~172.31.255.255 上記の範囲で割振らなければいけないと聞いたのですが 現行のグローバルIP 128.10.xxx.xxxで プライベートIPを単純に172.16.0.0~172.31.255.255 を割振って構わないのでしょうか?? それともグローバルIPを取得し直さなければダメか?? という所とその他諸々で悩んでいます。 プライベートIPはあくまでLAN内だけのアドレスだと思っていましたが何故使用出来る範囲が決まっているのか? すいませんが詳しい方がいましたら助けて下さい。

  • IPアドレスについておしえてください

    IPアドレスとは「インターネット上の機器1台1台に割り振られた識別番号」とのことですが、これは理解しました。 しかし、さらに疑問と不安がわきました。まったくの素人です。初心者向けにおしえてください。 1.IPアドレスはプロバイダや企業ごとに番号体系があるようですが、自分のIPアドレスはどこをみればわかりますか。IPアドレスは固有なんですか。それとも毎回接続するときにIPアドレスがが付与されるのでしょうか。たとえば***.***.までは同じであとの2つが毎回異なるのか。。もしそうならプロバイダの会員が同時に一斉にインターネット接続しようとしたら、IPアドレスが足りなくなって接続エラーになるんでしょうか。(まるでマンモス私立大学でその授業を受講している学生全員が出席するようなことがあったら教室があふれるように) 2.うちには機器としてモデム1つとPC2つとプリンター1つありますが、IPアドレスは機器1台1台に割り振られているということは、うちには4つともそれぞれ、違うIPアドレスが付与されてるんですか。 3.掲示板のなかには書き込み者のものと思われるIPアドレスが表示されていることがあります。表示がある掲示板とない掲示板はどんな違いがあるんでしょうか。またIPアドレスが他人に知られるとまずいのでしょうか。そうなると掲示板に書き込むのが怖いのですが、どうなんでしょうか。   4.URLを入れて企業のホームページにアクセスするとき、IEの左下に「***.***.***.***に接続しています」と表示されます。ためしにURLではなく、そのIPアドレスを打ち込んだら同じホームページにアクセスできました。  例として、202.221.2.70 です。SMBCです。もちろん、これは企業が公開している部分に限ってアクセスできるんだと思います。では、かりに私がウィルスソフトもファイアウォールもなにも導入してない場合、何者(不正アクセスの知識がなくても)かが私のIPアドレスをなんらかの方法で入手してブラウザに打ち込んだら不正侵入されてしまうんでしょうか。 専門家からみれば、ばかげた質問でしょうが、どうぞよろしくお願いします。

  • IPアドレスでアクセスを制限するには?

    環境は、OSはLinux Fedora10で、Apacheは2.2.10です。 「/var/log/httpd/error_log」に大量の(数秒毎)の不正と思えるアクセスが記録され、 そのIPアドレスからのアクセスを制限したいと考えています。 「/etc/httpd/conf/httpd.conf」には以下のように書いています。 <Directory "/var/www/hogehoge"> Order allow,deny Allow from all Deny from 123.45.67.89 123.45.67.90 234.45.67.89 111.222.33.44 ... </Directory> 「Deny from」の行のIPアドレスが多いせいか、HTTPDを再起動しようとすると、エラーが発生し失敗してしまいます。 (IPアドレスは1000件以上あります。IPアドレスを少なくすると、何も問題なくHTTPDは起動できます。) できれば、「Deny from」の行のIPアドレスを外部ファイルから呼び出したり、変数に定義してすっきりさせたりしたいのですが、どのようにすればよいのでしょうか。 (他にもよい方法があったら、教えてください。) よろしくお願い致します。

  • IPアドレスについて

    あるサイトからリンクしてきた人だけに見せたいページがあります。 しかしリンク元のサイトはリファラーをだしておらず、IPアドレスしかわかりません。 その場合、リンク元のIPアドレスでアクセスを制限させるというCGIは作成可能でしょうか。 ベーシック認証は利用できないサーバーです。 よろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう