見出し画像

PythonでIPアドレスからCCを取得

自分で撮っている写真をタイトル画像にしようかと思い、季節と無関係に設置してみました。

余談はさておき、サーバ実装でサービスしていない対象の国からのリクエストを拒絶したいとか、リクエスト回数制限やウエイトを入れたい等の要件はあるかと思います。
AWSだと、WAFの設定で出来るとは思うのですが、DBに入れて統計を取りたいとか、いろんな思惑があるケースもあります。
※無いなら無視してください。ww

あるサービスで、IPアドレスからドメインを割り出しwhois逆引きする案を思い付き実装してみたのですが、当然ではあるのですが遅い。
リアルタイムリクエストの間で実装するには諦めるか、DNSベースに変更するか、ARIN,APNIC,LACNIC,RIPE,AFRINICの公開しているIPアドレスの割り当て一覧表を定期的に取得して、更新する仕組みを用意するぐらいしかありません。

IPアドレスの割当国を割り出すだけの軽快なアプリケーションサービス(DNSサーバー)を運用されている方を発見。
Pythonからリクエストするため、dnsやnslookupのライブラリを入れて調べたのですが、txtの扱いが無いとか無視されている(txtは通常無視しますしw)ので、Ubuntu内蔵のnslookupコマンドをPythonから叩くことで代用実装してみました。

IPadress2CountryCode

これで終わっても良いのですが、READMEに書いたことぐらいは記載します。

> python3 AE_getIP2CC.py -h
>
> Usage:
>     AE_getIP2CC.py [-i | --ip <ip address string> ]  
>     AE_getIP2CC.py -h | --help
> 
> Options:
>     IPアドレスから割当Country Code取得機能
>     -i --ip <ip address string> ip address
>     -h --help                   当ヘルプを表示
> 
>     ex) AE_getIP2CC.py -i xx.xx.xx.xx
>         → DE

実行オプションは-hと-i/--ipです。
-iオプション後にグローバルIPアドレスを入れるとCCコードが返却されます。
実行に際し、OSにインストールされているnslookupとgrepコマンドを利用しています。nslookupコマンドの-type=txtオプションの吐き出し結果が異なる場合は想定外です。
動作検証はWSLのUbuntu 18.04ですのでUbuntuやDebianは問題無いと思います。おそらくLinux系全体は問題無いと思うのですが、手元にないのでちょっと不明。
ライセンスとしてはApache 2.0としています。
ライセンス表記を入れるのは、自分のコード(変数名の癖や実装パターン)を他人が表明されてしまった以降、自分のコードが使えなくなる可能性を避けたいだけ。

コード自体は短いので、普通に読める人がなら問題ないかと思いますし、公開する必要すら無いかもですね。w
備忘録としての趣が強い内容です。気に入ったら使ってみてください。

この記事が気に入ったらサポートをしてみませんか?