
みなさんこんにちは! ガノー(Ganohr)です! (≧▽≦)
‘GeoIP’(ジオ・アイピー)というものをご存知でしょうか? IPアドレスには物理的な位置に偏りがあり、それを基に大まかな住所が特定できます。それらのIPアドレスと住所や国名などを体系的に取り扱う技術をいいます。
そして、これらのIPアドレスとGeoIPは‘ASN’(Autonomous Service Number、エーエスエヌ/自律システム)と呼ばれる番号で紐付けがされています。
今回は特定のIPアドレスが所属するASNを検索して表示できる、WordPressのショートコードを開発する一連の作業を記録しながら、記事として公開していこうと思います。

更新履歴
目次
- 1.今回対象とする内容
- 2.本記事が対象とする読者層
- 3.サンプル
- 4.簡易目次(今後の記事執筆方針)
- 5.PHPでGeoIPを扱う方法
- 6.PHPでWhoisを扱う2つの方法
- 7.PHPでRDAPを扱う方法
- 8.GeoIP(IPとASNのマッチングを行える)データセットを入手する方法と仕様策定・戦略の構築
- 9.MySQLでIPアドレスを扱う方法
- 10.GeoIP用データセットを扱うDBのテーブル構築
- 10.1.CSVの確認
- 10.2.テーブル定義の構造を考える
- 10.3.CREATE TABLEを発行しよう
- 10.4.PhpMyAdminなどを利用している方への留意点
- 11.CSVからSQLのインサート文を生成しよう
- 11.1.SQL生成の前処理
- 11.2.CSVをSQLのINSERT文に置換する
- 11.2.1.geolite2_asn.sql
- 11.2.2.geolite2_asn_ip_map.sql
- 12.IPアドレスからASNやASOを検索してみる――仮作成したテーブルを実際に利用し、正しく検索できるか検証する
- 13.トータル60万件弱のデータベースを高速に更新し高速に検索する方法の解説(未定)
- 14.GeoIPデータセットを実際にMySQLへ登録する(未定)
- 15.WordPressでデバッグする2つの方法
- 16.WordPressのショートコードと留意点
- 17.WordPressのtransientが便利すぎる件
- 18.WordPressでデータベースを扱う方法
- 19.WordPressで実際にGeoIPのDBを利用する方法
今回対象とする内容
以下のデータを見てください。これはIPアドレス範囲の‘CIDR’(Classless Inter-Domain Routing)表記と‘ASN’(Autonomous Service Number、エー・エス・エヌ)と、ASO(Autonomous Service Organization)のデータセットの一部です。
1.0.0.0/24,13335,CLOUDFLARENET
1.0.4.0/22,38803,"Wirefreebroadband Pty Ltd"
1.0.64.0/18,18144,"Energia Communications,Inc."
1.0.128.0/17,23969,"TOT Public Company Limited"
1.1.1.0/24,13335,CLOUDFLARENET
1.1.64.0/19,2519,"ARTERIA Networks Corporation"
1.1.96.0/20,2519,"ARTERIA Networks Corporation"
1.1.112.0/21,2519,"ARTERIA Networks Corporation"
1.1.120.0/22,2519,"ARTERIA Networks Corporation"
1.1.124.0/23,2519,"ARTERIA Networks Corporation"
今回はこのようなデータをMySQLのデータベース上に登録し、最終的にWordPressで指定したIPアドレスのASNを調べられるショートコードを開発することを目的に記事を書いていきます。
ただし、解説内容が膨大となるため、日々少しずつ更新することとなります。更新はページ毎に行いつつ適宜に公開し、修正を行いますので、ぜひページをブックマークしながらお読みください。
本記事が対象とする読者層
本記事では、以下の方々を対象に記事を書いていきます。
- IPアドレスからASNやASO、住所や地名、緯度経度などを取得するGeoIPを実現したい方
- My SQL初心者でDBの基本的な事項は理解できている方、MySQLでCIDRを扱う方法を知りたい方
- WordPressのショートコードでMySQLを利用する方法を知りたい方
- IPアドレスからASNを引いたり、GeoIPを使いたい方。それも無償で。
- 車輪の再発明で技術を習得したい方。実践を通して確かな技術を習得したい方
サンプル
現在開発中ですが、今回の記事と同様の方法で、以下のサービスを展開しています(4月1日以降に公開予定)。
なお、今回紹介するデータセットは、2022年3月16日現在で『GANBAL』が利用しているデータセットよりも精度が劣っています。
よりよいデータセットを発見したため、そちらに内容を移行するべく、「どうせなら一緒に記事も書こう」という感じです。
簡易目次(今後の記事執筆方針)
- 今回使用するレンタルサーバー
- PHPでGeoIPを扱う方法
- PHPでWhoisを扱う2つの方法
- PHPでRDAPを扱う方法
- GeoIP(IPとASNのマッチングを行える)データセットを入手する方法と仕様策定・戦略の構築
- MySQLでIPアドレスを扱う方法
- GeoIP用データセットを扱うDBのテーブル構築
- トータル60万件弱のデータベースを高速に更新し高速に検索する方法の解説(未定)
- GeoIPデータセットを実際にMySQLへ登録する(未定)
- WordPressでデバッグする2つの方法
- WordPressのショートコードと留意点
- WordPressのtransientが便利すぎる件
- WordPressでデータベースを扱う方法
- WordPressで実際にGeoIPのDBを利用する方法
※書きかけ
WordPressの不具合対応/カスタマイズ¥15,000~
PC歴25年超、SE歴10年超、WordPress運営歴7年超、WordPressエンジニア歴5年超のスキルとノウハウを提供します
当サイト管理人の「ガノー」(Ganohr)は、日本最大手且つ東証一部上場企業が運営するクラウドソーシングサイト『Lancers』にて、認定ランサーとして活動しています。
※ 認定ランサーとはLancersにより様々な能力 ( 高い仕事遂行率・高い顧客満足度・多くの実績、など ) を評価したプロフェッショナルを認定する制度です。
コメントを書く