/pingsweep

Primary LanguagePythonMIT LicenseMIT

PingSweep

PingSweepは、指定されたIP範囲のアクティブなデバイスを検出し、SSH接続が可能かどうかを確認するPythonスクリプトです。Klipper搭載3DプリンタやラズベリーパイのIPアドレスを見失ったときに有効です。

特徴

  • 指定されたIP範囲内の生きているホストをPingで識別します。
  • SSH接続が可能なホストを検出します。
  • スキャン結果をファイルに保存し、次回スキャン時に結果を上書きします。
  • プログレスバーでスキャンの進行状況をリアルタイムに表示します。

使い方

特定のIP範囲を指定してスキャンする場合:

次のコマンドで、指定したIP範囲をスキャンします。

sudo python3 pingsweep.py 192.168.1.0/24
  • 192.168.1.0/24の部分をスキャンしたいIPアドレス範囲に置き換えてください。

自動でローカルIP範囲を検出してスキャンする場合:

次のコマンドでローカルネットワーク範囲を自動的に検出してスキャンします。

sudo python3 pingsweep.py

スレッド数の調整:

スキャンの速度を向上させるために、並列にスキャンするスレッド数を調整しています。現在の設定では200のスレッドで並列スキャンを行いますが、必要に応じてプログラム内のmax_workersパラメータを変更することで調整可能です。

必要なPythonライブラリ

以下のライブラリをインストールしてください。

pip install pythonping tqdm termcolor paramiko

インストール

  1. 必要なPythonライブラリをインストールします。
  2. スクリプトをダウンロードし、実行権限を与えます(必要な場合)。

実行例

ローカルネットワーク(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接続を試みて接続が可能なホストを特定します。

  1. IP範囲の決定: コマンドライン引数で指定されたIP範囲または自動検出されたIP範囲を使用します。
  2. Pingリクエストの送信: 各IPアドレスに対して、pythonpingライブラリを使ってPingリクエストを送信します。
  3. SSH接続の確認: 各IPアドレスに対してparamikoライブラリを使用してSSH接続を試みます。接続が可能であれば、リストに追加されます。
  4. 結果の表示と保存: 生存しているIPアドレスとSSH接続が可能なホストは一覧で表示され、結果は次回比較のためにファイルに保存されます。

結果の保存

  • スキャン結果はresults.txtファイルに保存され、毎回上書きされます。
  • JSONファイルにも保存され、前回の結果と比較する機能があります。

ライセンス

このプロジェクトはMITライセンスのもとで公開されています。詳細はLICENSEファイルをご覧ください。