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

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

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

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

## 🚀 インストール & 使い方

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

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

### **2. 基本的な使い方**
```bash
$ python3 multi_traversal.py -url https://example.com -w wordlist.txt
```
- `-url` : 対象のサイトURL
- `-w` : 使用する単語リスト

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

**例:**
```bash
$ 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` クラスにある。
```python
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`)**
```python
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`)**
```python
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`)**
```python
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](https://github.com/Alecto-Fsociety/Multi_Traversal)**

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