🕵️♂️
Python素人がCLIで動作するネットワークスキャナを作った
はじめに
NetEnumというWindowsアプリケーションをご存じだろうか。
株式会社リアライズが公開しているネットワーク系マルチツールだが、かなり前からお世話になっている。
主な機能として
- Pingスイープ
単一IP、もしくは範囲に対してPingを送出し、オンライン状態のホスト検出や死活監視を行うことができる。 - ARPスキャン
単一IP、もしくは範囲に対してARPリクエストを送出し、IPアドレスを持っているデバイスのMACアドレスを取得できる。 - ホスト名、ログインユーザーの検出
検出されたホストがWindowsマシンだった場合、ホスト名とログインユーザーを検出できる。
といったものを有する。
しかし、これWindows環境でしか使えないのよ!実に惜しい!
ということで自作してみることにした。
使用するプログラミング言語、ライブラリの選定
開発用にはWindows端末しかないが、Linuxなどの他端末でも使いたい…
ということで、Windowsストアから容易に導入でき、クロスプラットフォームなPython (3.9)を選択した。
また、ネットワークスキャン用のライブラリとして Scapy を選択した。
早速ですが完成品はこちらです
機能の紹介
- Pingスイープ機能
- ARPスキャン機能
どっちもオプションで名前解決を試みることが可能。
また出力はテーブル表示・JSONダンプのいずれかを選択することが可能。
おわりに
Scapyモジュールの使い方、ググってもズバリのページが出てこなかった。
断片的な情報を組み合わせてなんとか形にすることができた。
Scapyモジュールはパケットを自由に生成できるため、デジタルフォレンジックにも活用できる。
Pythonは標準でも便利モジュールが山ほどあり、コーディングを強力にサポートしてくれる。
しかし、逆にモジュールの使い方が分からなければ宝の持ち腐れ状態になってしまう。
Pythonのお作法を覚えるより、どのようなモジュールが存在するか&扱い方を知っていることが重要ではないかと感じた。
みんな使ってみてね!
Discussion