Pythonで作る!危険なIPアドレスを瞬時に見抜くツール

当ページはアフィリエイト広告を利用しています

記事内に広告が含まれています。
提供:photoAC「おくやまひろし様」

インターネットに接続している私たちのデバイスは、日々さまざまなIPアドレスと通信しています。しかし、その中には悪意のあるIPアドレスも存在し、それらはデータの窃取や不正アクセスなど、セキュリティリスクを引き起こす場合があります。

本記事では、Pythonを使って簡単に危険なIPアドレスを特定するツールの作り方を解説します。このツールは、人気のセキュリティサービス「AbuseIPDB」のAPIを活用し、疑わしいIPアドレスの情報を瞬時に確認することができます。

「AbuseIPDB」のAPIの取得から、コードの解説、怪しいIPアドレスを発見したときの手順まで進めていきます。セキュリティに興味がある方、またPythonに挑戦したい方にぴったりの内容です。それでは、早速始めていきましょう!

まずはAbuseIPDBのAPIを使えるようにしよう!

このツールを作成するためには、AbuseIPDBのAPIを利用する必要があります。AbuseIPDBは、インターネット上で悪意のある行動を行うIPアドレスをデータベース化し、情報を共有している便利なサービスです。以下の手順でAPIを使う準備を整えましょう。

1. AbuseIPDBのアカウント作成

まずは、公式サイト(https://www.abuseipdb.com/)にアクセスして、無料アカウントを作成しましょう。

サイトの右上にある「Sign Up」をクリック。

無料(free)プランを選択。

各欄に名前やメールアドレスを入力。

※RegisterのところはIndividualで大丈夫かなと。

登録したメールアドレスにメールがくるので、メール本文にあるリンクをクリックして、アカウントを有効化します。メールが来ない場合は、上記を要チェック。※あと、確かメールアドレスを入力すると、入力欄の近くに手動で送信できるボタンが表示されたような気がします。メールが来ない場合はそれを押しましょう。

2. APIキーの取得

アカウント作成後、AbuseIPDBのAPIキーを取得します。

ログイン後、画面右上のアカウントをクリックして、マイページ?に移動します。

「API」をクリックして「Create Key」でAPIキーを生成しましょう。

生成されたAPIキーを「Copy me」でコピーして、大切に保管してください(ツール内で利用します)。

Pythonコードの全文

疑わしいIPアドレスをチェックするPythonコードの全文です。AbuseIPDBのAPIを活用し、リアルタイムでIPアドレスの安全性を評価します。

コード内のAPI_KEY『あなたのAPIキー』に、先ほどのAbuseIPDBのAPIキーを入力します。

あとは.py形式で保存して、実行してください!(^^)!

import psutil
import requests

# AbuseIPDBのAPIキーを設定
API_KEY = "あなたのAPIキー"
API_URL = "https://api.abuseipdb.com/api/v2/check"

def check_ip(ip_address):
    """指定されたIPアドレスをAbuseIPDBでチェック"""
    headers = {
        "Accept": "application/json",
        "Key": API_KEY,
    }
    params = {
        "ipAddress": ip_address,
        "maxAgeInDays": 90,  # 過去90日間のデータを確認
    }
    response = requests.get(API_URL, headers=headers, params=params)
    if response.status_code == 200:
        data = response.json()
        return data['data']['abuseConfidenceScore']
    else:
        print(f"APIエラー: {response.status_code} - {response.text}")
        return None

def get_active_connections():
    """現在のネットワーク接続を取得"""
    connections = psutil.net_connections(kind='inet')  # 'inet'でIPv4/IPv6接続を取得
    active_ips = set()
    for conn in connections:
        if conn.raddr:  # リモートアドレスが存在する場合
            active_ips.add(conn.raddr.ip)
    return active_ips

def main():
    print("現在のネットワーク接続をスキャン中...")
    active_ips = get_active_connections()
    print(f"検出されたIPアドレス数: {len(active_ips)}")

    for ip in active_ips:
        print(f"\nIPアドレス: {ip}")
        abuse_score = check_ip(ip)
        if abuse_score is not None:
            print(f"悪意スコア: {abuse_score}")
            if abuse_score > 50:
                print("警告: このIPは悪意のある可能性があります!")
            else:
                print("このIPは安全そうです。")
        else:
            print("このIPアドレスのスコアを取得できませんでした。")

if __name__ == "__main__":
    main()
input("処理が完了しました。Enterキーを押して終了します。")

必要なライブラリの解説

使用するライブラリは以下の通りです:

  • psutil
    • ネットワーク接続やシステムのリソース使用状況を取得するためのライブラリ。psutil.net_connections()を使って、現在のネットワーク接続を調べ、アクティブなIPアドレスを抽出します。
    • インストール方法:pip install psutil
  • requests
    • HTTPリクエストを送信するためのライブラリ。AbuseIPDBのAPIと通信し、IPアドレスの評価結果を取得します。
    • インストール方法:pip install requests

関数の解説

  • check_ip(ip_address)
    • この関数は、指定したIPアドレスをAbuseIPDBのAPIでチェックし、そのIPアドレスが危険かどうかを判定します。
    • 処理内容:
      • requests.get()を使用してAPIにリクエストを送り、指定されたIPアドレスの悪意スコアを取得します。
      • レスポンスが成功した場合、そのスコア(abuseConfidenceScore)を返し、スコアが50を超える場合は警告を表示します。
  • get_active_connections()
    • この関数は、現在のネットワーク接続を取得します。**psutil.net_connections(kind='inet')**を使用して、IPv4およびIPv6のネットワーク接続を調べます。
    • 取得した接続情報から、リモートアドレス(IPアドレス)を抽出し、セット(重複なし)として返します。
  • main()
    • ツール全体を実行するメイン関数。現在のネットワーク接続をスキャンし、見つかったIPアドレスに対して**check_ip()**を使って評価します。
    • 評価結果に応じて、IPが安全かどうかを表示します。

実行結果

現在のネットワーク接続をスキャン中...
検出されたIPアドレス数: 3

IPアドレス: 192.168.1.1
悪意スコア: 0
このIPは安全そうです。

IPアドレス: 8.8.8.8
悪意スコア: 0
このIPは安全そうです。

IPアドレス: 34.107.243.93
悪意スコア: 70
警告: このIPは悪意のある可能性があります!

注意事項

  • 一部のIPアドレス(例えば127.0.0.1192.168.x.xのようなプライベートIP)は通常チェック不要です。
  • AbuseIPDBへの問い合わせにはAPI制限があります。(無料プランでの1日あたりのリクエスト数は制限あります。2025年現在の無料プランでは1000回です
  • 高頻度で実行する場合は適切な間隔を空けるなど、APIの利用ポリシーに従ってください。

疑わしいIPアドレスがあったらチェックしよう

AbuseIPDBのサイトを使って疑わしいIPアドレスをチェックすることもできます!サイトでのチェック方法についても簡単にまとめます。

1. AbuseIPDBのウェブサイトにアクセス

まず、以下のURLにアクセスします。

Just a moment...

2. 検索ボックスにIPアドレスを入力

サイトにアクセスしたら、トップページに検索ボックスが表示されます。そこに、調べたいIPアドレスを入力します。

3. IPアドレスの情報を確認

検索ボタンを押すと、そのIPアドレスに関する情報が表示されます。表示される情報には以下の内容が含まれます

  • Abuse Score(悪意スコア): IPアドレスが悪用されているかどうかのスコア(0~100)。
  • レポートの数: このIPが報告された回数。
  • レポートの詳細: どのような悪用が報告されたか、例えばスパム、DDoS攻撃など。

4. 評価を元に対応を決定

  • **悪意スコアが高い(50以上)**場合、そのIPアドレスが悪用されている可能性が高いため、警戒すべきです。特に不審な接続がある場合は、接続を遮断することを検討しましょう。
  • **悪意スコアが低い(50未満)**場合、そのIPアドレスは安全であると考えられますが、引き続き監視を行いましょう。

まとめ

これで、あなたもPythonを使って危険なIPアドレスを瞬時にチェックできるツールが完成しました!
**psutil**を使ってネットワーク接続を調べ、AbuseIPDBでその安全性を確認することができます。
これを使って、リアルタイムにネットワークのセキュリティを向上させることができます!

ぜひ、やってみてくださいね。また、機能を追加して、もっと便利なツールにしていくのも楽しいかもしれません!

それでは、次回もお楽しみに!