起因#
ウェブサイトのログ解析記事を書いている最中に、純真 IP データベースを一括で IP アドレスの所属地を検索する必要があることに気づきました。
そこで、この記事では Python を使用して IP の所属地を一括で検索する方法について説明します。
この記事は Python とツール共有の両方に分類されます。
純真 IP アドレスデータベースの紹介#
純真 IP データベースは qqwry.dat ファイルを解析します。純真版の QQWry IP データベースには、中国電信、中国移動、中国聯通、長城寬帯、聚友寬帯などの ISP の最新かつ正確な IP アドレスデータが収集されています。IP データベースは 5 日ごとに更新され、定期的に最新の IP データベースを更新する必要があります。
ソフトウェアは以下のようになります:
このデータベースは頻繁に更新されるため、私はGitHub
プロジェクトを見つけました。毎日自動的に最新のqqwry.dat
をスキャンして同期します。
最新のqqwry.dat
を取得するには、ここをクリックしてダウンロードしてください(プロキシを使用する必要があります)。
この最新バージョンをダウンロードして元のバージョンと置き換えることもできますので、純真データベースのインストールパッケージを常にダウンロードする必要はありません。
Python で一括検索#
詳細なライブラリについては、最後の参考記事「qqwry-python3」を参照してください。
この作者が作成したツールは、すでにpypi
にアップロードされており、pip install qqwry-py3
コマンドで使用できます。
~~ もちろん、私は単純に IP の所属地を一括で読み取るためのコードを実装しましたが、後で他のアイデアが浮かんだ場合はこの記事を更新します~~
~~ 最終バージョンのコードは以下の通りです:~~
** なんか難しそうなので、まずは完成した qqwry ライブラリを使います。興味があれば後で書くかもしれません(書かないかもしれません) **
::quyin:1huaji::
テキストから IP アドレスを一括で検索して結果を出力するコードは以下の通りです:
# -*- coding: utf-8 -*-
'''
@author: soapffz
@fucntion: 純真IPデータベースqqwry.datを使用して、txt内のIPの所属地を一括で検索する
@time: 2019-06-28
'''
from qqwry import QQwry
from IPy import IP
def batch_query_and_print():
q = QQwry()
q.load_file('qqwry.dat')
with open('ip.txt') as f:
ip_list = f.read().splitlines()
for read_content in ip_list:
try:
IP(read_content)
except:
print("規格に合わないIPアドレスがあります。確認してから再実行してください。")
exit(0)
address_list = [q.lookup(ip) for ip in ip_list]
for i, j in zip(ip_list, address_list):
query_results = i+" "+j[0]+" "+j[1]
print(query_results)
with open("query_results.txt", 'a', encoding='utf-8') as f:
f.writelines(query_results+"\n")
if __name__ == "__main__":
batch_query_and_print()
qqwry
とIPy
ライブラリをそれぞれpip install
コマンドでインストールしてください。
検索する IP をip.txt
に入れ、qqwry.dat
ファイルと.py
ファイルと同じディレクトリに配置して実行します。
以下は実行結果です:
参考記事: