🕵️‍♂️

Python素人がCLIで動作するネットワークスキャナを作った

2022/02/09に公開

はじめに

NetEnumというWindowsアプリケーションをご存じだろうか。
株式会社リアライズが公開しているネットワーク系マルチツールだが、かなり前からお世話になっている。

主な機能として

  • Pingスイープ
    単一IP、もしくは範囲に対してPingを送出し、オンライン状態のホスト検出や死活監視を行うことができる。
  • ARPスキャン
    単一IP、もしくは範囲に対してARPリクエストを送出し、IPアドレスを持っているデバイスのMACアドレスを取得できる。
  • ホスト名、ログインユーザーの検出
    検出されたホストがWindowsマシンだった場合、ホスト名とログインユーザーを検出できる。

といったものを有する。

しかし、これWindows環境でしか使えないのよ!実に惜しい!

ということで自作してみることにした。

使用するプログラミング言語、ライブラリの選定

開発用にはWindows端末しかないが、Linuxなどの他端末でも使いたい…

ということで、Windowsストアから容易に導入でき、クロスプラットフォームなPython (3.9)を選択した。
また、ネットワークスキャン用のライブラリとして Scapy を選択した。

早速ですが完成品はこちらです

https://github.com/Neustrashimy/netenum.py

機能の紹介

  • Pingスイープ機能
  • ARPスキャン機能

どっちもオプションで名前解決を試みることが可能。
また出力はテーブル表示・JSONダンプのいずれかを選択することが可能。

おわりに

Scapyモジュールの使い方、ググってもズバリのページが出てこなかった。
断片的な情報を組み合わせてなんとか形にすることができた。

Scapyモジュールはパケットを自由に生成できるため、デジタルフォレンジックにも活用できる。

Pythonは標準でも便利モジュールが山ほどあり、コーディングを強力にサポートしてくれる。
しかし、逆にモジュールの使い方が分からなければ宝の持ち腐れ状態になってしまう。
Pythonのお作法を覚えるより、どのようなモジュールが存在するか&扱い方を知っていることが重要ではないかと感じた。

みんな使ってみてね!

Discussion