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

🎯 タスク
このプロジェクトでは、以下のことを学びます。
- プロジェクトをセットアップし、必要なライブラリをインストールする方法
- GUI と
nmapコマンドラインツールを実行するために必要なライブラリをインポートする方法 - ユーザーが入力した IP アドレスを取得し、ネットワークをスキャンするスキャン関数を定義する方法
- GUI のメインウィンドウを作成する方法
- IP アドレスの入力フィールドと「ネットワークをスキャン」ボタンを追加する方法
- スキャン結果を表示するテキストエリアを作成する方法
- プロジェクトを実行し、ネットワークスキャンを行う方法
🏆 達成目標
このプロジェクトを完了した後、以下のことができるようになります。
- Python プロジェクトをセットアップし、ライブラリをインストールする
- ライブラリをインポートし、Python スクリプトで使用する
- Tkinter を使って GUI を作成する
- ユーザー入力を処理し、関数をトリガーする
nmapコマンドラインツールを使ってネットワークスキャンを行う
プロジェクトをセットアップする
新しい Python ファイルを作成し、network_scanner.py と名付けます。好みのコードエディタでこのファイルを開きます。
cd ~/project
touch network_scanner.py
次に、以下のコマンドを使用して nmap、tkinter、および 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 を使用してネットワークスキャンが実行され、結果がテキストエリアに表示されます。

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



