PingSweepは、指定されたIP範囲のアクティブなデバイスを検出し、SSH接続が可能かどうかを確認するPythonスクリプトです。Klipper搭載3DプリンタやラズベリーパイのIPアドレスを見失ったときに有効です。
- 指定されたIP範囲内の生きているホストをPingで識別します。
- SSH接続が可能なホストを検出します。
- スキャン結果をファイルに保存し、次回スキャン時に結果を上書きします。
- プログレスバーでスキャンの進行状況をリアルタイムに表示します。
次のコマンドで、指定したIP範囲をスキャンします。
sudo python3 pingsweep.py 192.168.1.0/24
192.168.1.0/24
の部分をスキャンしたいIPアドレス範囲に置き換えてください。
次のコマンドでローカルネットワーク範囲を自動的に検出してスキャンします。
sudo python3 pingsweep.py
スキャンの速度を向上させるために、並列にスキャンするスレッド数を調整しています。現在の設定では200のスレッドで並列スキャンを行いますが、必要に応じてプログラム内のmax_workers
パラメータを変更することで調整可能です。
以下のライブラリをインストールしてください。
pip install pythonping tqdm termcolor paramiko
- 必要なPythonライブラリをインストールします。
- スクリプトをダウンロードし、実行権限を与えます(必要な場合)。
ローカルネットワーク(192.168.1.0/24)をスキャンした場合の出力例です:
$ sudo python3 pingsweep.py 192.168.1.0/24
Scanning: 100%|██████████████████████████████████████████| 254/254 [00:25<00:00, 10.12host/s]
Scan Complete.
Alive Hosts:
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
SSH Enabled Hosts:
- 192.168.1.2
PingSweepはネットワーク上のデバイスの生存を確認するためにICMPエコーリクエストを送信し、応答の有無に基づいてそのデバイスの状態を判定します。また、SSH接続を試みて接続が可能なホストを特定します。
- IP範囲の決定: コマンドライン引数で指定されたIP範囲または自動検出されたIP範囲を使用します。
- Pingリクエストの送信: 各IPアドレスに対して、
pythonping
ライブラリを使ってPingリクエストを送信します。 - SSH接続の確認: 各IPアドレスに対して
paramiko
ライブラリを使用してSSH接続を試みます。接続が可能であれば、リストに追加されます。 - 結果の表示と保存: 生存しているIPアドレスとSSH接続が可能なホストは一覧で表示され、結果は次回比較のためにファイルに保存されます。
- スキャン結果は
results.txt
ファイルに保存され、毎回上書きされます。 - JSONファイルにも保存され、前回の結果と比較する機能があります。
このプロジェクトはMITライセンスのもとで公開されています。詳細はLICENSEファイルをご覧ください。