0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでディレクトリ探索ツールを作る! Multi_Traversal.py の実装解説

Last updated at Posted at 2025-03-19

🔥 Multi_Traversal.py とは?

Multi_Traversal.py は、ターゲットサイトのディレクトリを探索し、有効なパスを自動で検出するツール

一般的な ディレクトリブルートフォースツール のように、wordlist を使って特定のパスを試し、レスポンスコードを確認する ことで、アクセス可能なエンドポイントを特定できる。

  • 目的: HTTP 200/301/302 などのレスポンスを返すパスを発見
  • 特徴:
    • multiprocessing によるマルチスレッド処理
    • socket を直接操作し、軽量&高速
    • SSL 対応(HTTPSでも動作)
    • JSON 形式で結果を保存可能
    • エラーハンドリング & ログ機能 でデバッグしやすい

🚀 インストール & 使い方

1. 環境構築

このツールは Python 3.x で動作する。
必要なモジュールは標準ライブラリに含まれているため、追加インストールは不要。

# クローンして実行
$ git clone https://github.com/Alecto-Fsociety/Multi_Traversal.git
$ cd Multi_Traversal
$ python3 multi_traversal.py -h

2. 基本的な使い方

$ python3 multi_traversal.py -url https://example.com -w wordlist.txt
  • -url : 対象のサイトURL
  • -w : 使用する単語リスト

例:

$ python3 multi_traversal.py -url https://target.com -w common_paths.txt -p 443 -t 10
  • -p 443 : ポート番号を指定(デフォルトは 80 / 443
  • -t 10 : 10スレッドで並列処理

例:

$ python3 multi_traversal.py -url https://target.com -w common_path.txt -s 401 403
  • -s 401 402 : ステータスコードを複数追加(デフォルトは 200 / 301 / 302)

🛠️ コード解説

1. Multi_Traversal クラスの構造

このツールのメイン部分は Multi_Traversal クラスにある。

class Multi_Traversal:
    def __init__(self,target_url,path_name,port,add_status):
        self.target_url = target_url
        self.path_name = path_name
        self.base_url = urlparse(self.target_url)
        self.scheme = (self.base_url).scheme
        self.domain = (self.base_url).netloc
        self.port = port if port is not None else (443 if self.scheme == "https" else 80)
  • target_url : スキャン対象のURL
  • path_name : 使用するワードリストのパス
  • port : 指定がなければ 80 or 443 に自動設定

2. リクエストの作成 (get_headers)

def get_headers(self,path):
    return f"GET /{path} HTTP/1.1\r\nHost:{self.domain}\r\nUser-Agent:{random.choice(self.ua_list)}\r\nAccept:*/*\r\n\r\n"

GETリクエストを作成するメソッド だ。

  • User-Agent をランダムに選択
  • ペイロードを直接埋め込むことで、リクエストをカスタマイズ可能

3. ディレクトリ探索 (requests)

def requests(self):
    pathlib.Path(self.out_dir_name).mkdir(exist_ok=True)
    lines = len(self.path_list)
    for point, path in enumerate(self.path_list, start=1):
        try:
            with socket.create_connection((self.domain, self.port)) as sock:
                sock.settimeout(1.5)
                sock.sendall(bytes(self.get_headers(path), "utf-8"))
                response = sock.recv(1024*10)
                status_match = re.search(r"HTTP/\d\.\d (\d+)", response.decode("utf-8", errors="ignore"))
                status = status_match.group(1) if status_match else "000"
  • ワードリストの各パスに対してリクエストを送信
  • socket.create_connection軽量なHTTPリクエストを実行
  • レスポンスのステータスコードを解析

4. スレッド処理 (multiprocessing)

def main():
    instance_traversal = Multi_Traversal(parse.url,parse.w,parse.p,parse.s)
    with Pool(parse.t) as pool:
        pool.starmap(instance_works, [(instance_traversal,)] * parse.t, chunksize=1)
  • multiprocessing.Pool を使い、並列処理で高速化
  • スキャンの時間を大幅に短縮できる

📌 まとめ

  • Multi_Traversal.py高速・軽量なディレクトリ探索ツール
  • socket を使い、HTTPリクエストを最小限の負荷で送信
  • multiprocessing による並列処理で 大規模スキャンを効率化
  • エラーハンドリング・ログ管理がしっかりしている ので、実用的

使い方はシンプルだけど、カスタマイズ次第で強力なツールに進化できるという設計

Github

  • ここにソースコード載せているので良ければ参考までに
    Alecto_Fsociety/Multi_Traversal

質問先

  • 何か不明な点などがありましたらこちらのメールアドレスに
    お願いします。
    Mail : goodbye_friend1111@proton.me
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?