Python でネットワークスキャナーを構築する

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、Python を使ってネットワークスキャナーを構築する方法を学びます。ネットワークスキャナーは、nmap コマンドラインツールを利用して指定された IP アドレスをスキャンし、Tkinter ライブラリを使ってグラフィカルユーザーインターフェイス(GUI)に結果を表示します。

ネットワークスキャナーの GUI の例

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • プロジェクトをセットアップし、必要なライブラリをインストールする方法
  • GUI と nmap コマンドラインツールを実行するために必要なライブラリをインポートする方法
  • ユーザーが入力した IP アドレスを取得し、ネットワークをスキャンするスキャン関数を定義する方法
  • GUI のメインウィンドウを作成する方法
  • IP アドレスの入力フィールドと「ネットワークをスキャン」ボタンを追加する方法
  • スキャン結果を表示するテキストエリアを作成する方法
  • プロジェクトを実行し、ネットワークスキャンを行う方法

🏆 達成目標

このプロジェクトを完了した後、以下のことができるようになります。

  • Python プロジェクトをセットアップし、ライブラリをインストールする
  • ライブラリをインポートし、Python スクリプトで使用する
  • Tkinter を使って GUI を作成する
  • ユーザー入力を処理し、関数をトリガーする
  • nmap コマンドラインツールを使ってネットワークスキャンを行う

プロジェクトをセットアップする

新しい Python ファイルを作成し、network_scanner.py と名付けます。好みのコードエディタでこのファイルを開きます。

cd ~/project
touch network_scanner.py

次に、以下のコマンドを使用して nmaptkinter、および python-nmap コマンドラインツールをインストールします。

sudo apt update
sudo apt-get install nmap -y
sudo apt-get install python3-tk -y
sudo pip install python-nmap
✨ 解答を確認して練習

必要なライブラリをインポートする

ファイルの冒頭で、必要なライブラリをインポートします。GUI 用に tkinter を、nmap コマンドラインツールを実行するために subprocess をインポートします。

import tkinter as tk
import subprocess
✨ 解答を確認して練習

スキャン関数を定義する

「ネットワークをスキャン」ボタンがクリックされたときにトリガーされる scan_network という関数を定義します。この関数は、ユーザーが入力した IP アドレスを取得し、結果のテキストエリアをクリアし、nmap コマンドを実行してネットワークをスキャンします。

def scan_network():
    ip_address = entry_ip.get()
    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, f"Scanning network: {ip_address}\n\n")

    try:
        output = subprocess.check_output(["nmap", "-F", ip_address])
        result_text.insert(tk.END, output.decode("utf-8"))
    except subprocess.CalledProcessError:
        result_text.insert(tk.END, "An error occurred while scanning the network.")
✨ 解答を確認して練習

メインウィンドウを作成する

Tkinter の Tk() クラスを使用して、GUI のメインウィンドウを作成します。

window = tk.Tk()
window.title("Network Scanner")
✨ 解答を確認して練習

入力フィールドとスキャンボタンを追加する

ユーザーが IP アドレスを入力するためのラベルとエントリーフィールドを作成します。次に、クリックされたときに scan_network 関数を呼び出す「ネットワークをスキャン」ボタンを作成します。

label_ip = tk.Label(window, text="Enter IP Address:")
label_ip.pack()
entry_ip = tk.Entry(window)
entry_ip.pack()
scan_button = tk.Button(window, text="Scan Network", command=scan_network)
scan_button.pack()
✨ 解答を確認して練習

結果表示用のテキストエリアを追加する

Tkinter の Text() クラスを使用して、テキストエリアを作成します。このテキストエリアにはスキャン結果が表示されます。

result_text = tk.Text(window)
result_text.pack()
✨ 解答を確認して練習

メインループを開始する

GUI のメインループを開始するために、ファイルの末尾に次の行を追加します。

window.mainloop()
✨ 解答を確認して練習

プロジェクトを実行する

ファイルを保存し、Python インタープリターを使用して実行します。GUI ウィンドウが表示されます。

cd ~/project
python network_scanner.py

入力フィールドにスキャンしたい IP アドレスを入力し、「ネットワークをスキャン」ボタンをクリックします。nmap を使用してネットワークスキャンが実行され、結果がテキストエリアに表示されます。

ネットワークスキャナーの GUI ウィンドウ
✨ 解答を確認して練習

まとめ

このプロジェクトでは、Tkinter ライブラリを使用して Python でネットワークスキャナーを構築する方法を学びました。このネットワークスキャナーは、nmap コマンドラインツールを利用して指定された IP アドレスをスキャンします。結果はグラフィカルユーザーインターフェイスに表示され、ユーザーは簡単にネットワークスキャンを実行し、出力を確認することができます。必要に応じて、さらに機能を追加したりユーザーインターフェイスを改善したりすることで、ネットワークスキャナーを強化することができます。