Pythonで定期的にグローバルIPアドレスを記録する方法

こんにちは。先日ふと気になることがありました。とあるサービスでLinuxのインスタンスを作成した時に、「接続元のIPアドレスを制御しますか?」のような問題に遭遇しました。

会社で仕事をしていれば、(会社にもよりますが)1つないしは複数の特定のグローバルIPアドレスが使われていたりしますが、自宅は分かりません。マンションに敷いてあるものを使っているので、詳しい仕様もあまり調べていませんでした。

と、言うことで、定期的に自分が使っているグローバルIPアドレスを記録する方法をPythonで実現しようと思います。

概要

簡単な概要を書いておきます。シンプルです

  1. Pythonでコードを書く(スクリプトの作成)
  2. タスクスケジューラでNo.1のスクリプトを定期実行させる
  3. スクリプト実行の結果、CSVファイルが出力される。

CSVの出力イメージ

こんな感じでCSVに記録していきます。

どうやってグローバルIPアドレスを調べるか

世の中には便利なWebサイトがありまして、アクセスするとアクセス元のIPアドレス、すなわち自分が使ってくれるIPアドレスを教えてくれるサイトがあります。

http://www.myglobalip.com/

セキュリティの都合上、上にメモ帳をおいてグローバルIPアドレスを隠していますが、ちゃんと表示されます。

Pythonでコードを書く

ここからがコーディングです。上記のサイトで表示されるIPアドレスを、簡単なWebスクレイピングで取得し、その結果を日時とともにCSVファイルに記録します。

### Import Python Standard Modules
import urllib
import urllib.request
import os
import csv
import datetime

### Import Python External Modules
from bs4 import BeautifulSoup

### Basic Parameters
url = "http://www.myglobalip.com/"
script_path = os.getcwd()
record_path = os.path.join(script_path, "result.csv")

### Execution Time
now_time = datetime.datetime.now()
execution_date = now_time.strftime('%Y/%m/%d')
execution_time = now_time.strftime('%H:%M:%S')

### Breaking through the Proxy
os.environ["http_proxy"] = "http://username:password@127.0.0.1:8080"
os.environ["https_proxy"] = "https://username:password@127.0.0.1:8080"

def get_via_bs4():
    response = urllib.request.urlopen(url)
    soup = BeautifulSoup(response, "lxml")
    response.close()
    div_ip = soup.find("div", id="ip")
    h3 = div_ip.find("h3")
    result = h3.select("span")[0].string
    return result

def record_in_csv(arg_text):
    if os.path.exists(record_path) == False:
        with open(record_path, "w", newline="") as f:
            writer = csv.writer(f)
            writer.writerow(["Date", "Time", "Global_IP"])
    with open(record_path, "a", newline="") as f:
        writer = csv.writer(f)
        writer.writerow([execution_date, execution_time, arg_text])


### Execution!!
global_ip = get_via_bs4()
record_in_csv(global_ip)

私もまだまだ初心者なので、コードが汚いのはお許しください。

タスクスケジューラに設定する

タスクスケジューラの使い方はインターネットで調べれば沢山でてきますし、そんなに難しくないので割愛しますが、私がハマった部分だけ書いておこうと思います。

上図はタスクスケジューラの「操作」を設定する画面ですが、入力ボックス3つに記載すべき事項についてです。なお、私のやり方であり、別にも解はあるので、一例として捉えてください。

プログラム/スクリプト(P)python.exeのフルパスを記載する。
※この時、Python仮想環境を使っている場合は、仮想環境内のpython.exeへのパスを記載する。
例:”C:\python_venv_name\Scripts\python.exe”
引数の追加(オプション)(A)スクリプトのファイル名(拡張子付き)を記載する。
例:”Get_Global_IP.py”
開始(オプション)(T)スクリプトが保存されているディレクトリを記載する。
例:”C:\python_venv_name”

補足:プロキシについて

私はたまたま認証プロキシのある環境で開発したので、そのコードも記載しています。プロキシなんてないよという方は以下の部分をコメントアウトまたは削除してください。

### Breaking through the Proxy
os.environ["http_proxy"] = "http://username:password@127.0.0.1:8080"
os.environ["https_proxy"] = "https://username:password@127.0.0.1:8080"
よっさん
  • よっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後某日系IT企業でグローバル案件に携わる。マレーシアに1.5年赴任した経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。

コメントする

メールアドレスが公開されることはありません。