ポートスキャンツール2選

# 超ド定番（Nmap）
ネットワークやセキュリティについて勉強時始めた際に一番最初に出会うツールといっても過言ではないのがNmap!!
### 特徴
* KaliLinuxに標準搭載のネットワーク調査とセキュリティ監査のためのオープンソースツール
### 主な機能（一部）
* ホストの存在確認
* 対象ホストのOS特定
* 開いているポートのサービス、バージョン特定
* ファイアーウォール回避、偽装

### 使い方
めちゃ基本
```:bash
nmap 192.168.0.1
```
<details><summary>オプション(ターゲット指定)</summary>

| オプション | 概要 | 書き方 |
|:-:|:-:|:-:|
|  | 複数のホストを指定 | nmap 192.168.0.1 192.168.0.10 |
|  | 範囲指定 | namp 192.168.0.1-254 |
|  | プレフィックス指定 | namp 192.168.0.254/24 |
|  | ドメイン指定 | nmap test.test.org |
| -iL | ファイル指定 | -iL test/list.txt |
| -iR | ランダムにN個スキャン | -iR 100 |
| -exclude | 特定ipの除外 | -iL 192.168.0.1 |
| -excludefile | 除外リストのファイル指定 | -excludefile test/list.txt |

</details>

<details><summary>オプション(ポート指定)</summary>

| オプション | 概要 | 書き方 |
|:-:|:-:|:-:|
| -p | 特定のポートのみスキャン | たくさんあるので下記参照 |
| -p- | 全ポートスキャン | -p- |
| –exclude-ports | 除外ポート | –exclude-ports 22 |
| -r | ポートを順番にスキャン（デフォルトではランダム） | -r |
| -F | 頻繁に使われるポート100個 | -F |
| -top-ports | 1~N番ポートまでスキャン | -top-ports 500|

`-p`の様々な書き方
| 説明 | 書き方 |
|:-:|:-:|
| 決まったポートのみ | -p 80,443 |
| 範囲指定 | -p 20-25 |
| サービス名で指定（デフォルトポート） | -p http,https |

:::note info
nmapはTCP:9100に対してはデフォルトでスキャンを実施しません。
これは、特定のプリンターはTCP:9100で受けたパケットをすべて印刷してしまうからです。
:::
:::note warn
本当にすべてのポートに対してスキャンしたいのなら
```
nmap 192.168.1.1 -p0- Leaving off end port in range makes the scan go through to port 65535
```
:::

</details>


<details><summary>オプション(スキャン方法の指定)</summary>

| オプション | 概要 | 詳細 |
|:-:|:-:|:-:|
| -sS | TCP SYNスキャン/TCPハーフスキャン | 3way hand shakeの最後のackを返さない。ログに残りずらい |
| -sT | TCP Connectスキャン | TCPを確立させる |
| -sU | UDPスキャン | TCPに比べかなり時間がかかる |
| -sW | Windowスキャン | windowとはTCP通信でデータを連続送信する際に使われるバッファ制御 |
| -sM | Maimonスキャン | 簡易FWを回避できる可能性 |
| -sA | TCP ACK スキャン | FWによってフィルタされているかされていないか（ポートの開放状態は判別しないため併用必須） |
| -sl | Idleスキャン | 特定の送信元を踏み台にしてスキャンを実施（詳細下記） |
| -sF | TCP FINスキャン | ステルススキャン |

:::note info
nmapはTCP:9100に対してはデフォルトでスキャンを実施しません。
これは、特定のプリンターはTCP:9100で受けたパケットをすべて印刷してしまうからです。
:::
:::note info
Idleスキャンのやり方
1 踏み台として使用可能かチェック
```
sudo nmap -Pn -p 80 --script ipidseq 192.168.1.100
ipidseq: Incremental
```
`Incremental`または`Broken little-endian incremental`なら使用可能
`Randomized` なら使用不可能
2 実施
sudo nmap -sI 192.168.1.100 192.168.1.10
:::

</details>

<details><summary>オプション(ホストの検出)</summary>

| オプション | 概要 |
|:-:|:-:|
| -sL | Listスキャン |
| -sn | Pingスキャン |

</details>

<details><summary>オプション(DNSに関係)</summary>

| オプション | 概要 |
|:-:|:-:|
| -n | ホストを検出した場合でもDNSの逆引きは行わない |
| -R | 検出したホストのIPに対してDNSの逆引きを行う |

</details>

<details><summary>オプション(OSの検出)</summary>

| オプション | 概要 |
|:-:|:-:|
| -O | OSの種類を特定する |
| -A | OSの種類とバージョンを特定する |
| -osscan-guess | 完全なOSを検出できない場合に類似する情報を提示する |

</details>

<details><summary>オプション(サービスとバージョンの特定)</summary>

| オプション | 概要 |
|:-:|:-:|
| -sV | バージョン検出 |
| -version-intensity | バージョン検出精度(0-9)(デフォルト７) |
| -version-light | バージョン検出精度を２ |
| -version-all | バージョン検出精度を９ |
| –version-trace  | バージョンスキャンのトレース情報表示 |

</details>

<details><summary>オプション(スクリプトを使用したスキャン)</summary>

| オプション | 概要 |
|:-:|:-:|
| -sC | デフォルトスクリプトでスキャン |
| -script= | スクリプトの指定 |
| -script-args= | スクリプトへの引数 |
| –script-updatedb | scripts/script.dbのデータベースを更新 |
| –script-help=  | スクリプトコマンドのヘルプ、コマンドのカテゴリ、ファイル、スクリプトのリストを表示 |

:::note info
スクリプトファイルは`/usr/share/nmap/scripts`に格納されている
:::

</details>

<details><summary>オプション(スキャン間隔と速度)</summary>

| オプション | 概要 |
|:-:|:-:|
| -T | 高速スキャン。「nmap -T4 -F 」などと指定。5は最速ですが精度を犠牲。意図的に遅い０、１はIDS回避テスト用に利用。 |

</details>

# スピード感！！（RustScan）
Nmapの良いところはもらいつつとても処理速度が速い
### 特徴
* kalilinuxには標準搭載ではない
* nmapはすべてのポートにスクリプトも実行しているが、rustscanはポートスキャンを一通り行った後に、開いているポートに対してスクリプトを実行する
### 主な機能（一部）
* ホストの存在確認
* 対象ホストのOS特定
* 開いているポートのサービス、バージョン特定
* ファイアーウォール回避、偽装
* （基本的にNmapと同じ）
## インストール方法(最新は各人で調べてください)
```:bash
wget　https://github.com/RustScan/RustScan/releases/download/2.1.1/rustscan_2.1.1_amd64.deb
sudo dpkg -i rustscan_2.1.1_amd64.deb
```

###使い方
めちゃ基本
```:bash
rustscan -a 10.10.216.174 -- -sV -A -oN rustscan.txt
```
対象ホストの後に`--`を入れた後にNmapのオプションを使うことができます。