CML2を使いこなす。（その14：トラフィックの生成）

# はじめに
前回は`TRex`を使うための準備まで行ったため、今回は実際に`TRex Stateless Gui`を使ったトラフィック生成を行ってみます。

- 【前】[CML2を使いこなす。（その13：トラフィックジェネレータの準備）](https://qiita.com/sakai00kou/items/9448f3d6ce4918d6d709)
- 【次】[CML2を使いこなす。（その15：ラボのバックアップ）](https://qiita.com/sakai00kou/items/23d672ad70da7daf6b6e)

# TRex Stateless Gui画面について
「**File**」→「**Connect**」から`TRex`に接続すると、以下のような画面が表示されます。

![capture_09092021_085032.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/9809eb28-5787-d489-b0f3-5c8be219cefb.jpeg)

画面左に表示されている「**Port 0**」と「**Port 1**」は`TRex`のトラフィック送信用ポートの設定になります。

尚、`TRex Stateless Gui`接続に使われる`eth0`は生成したトラフィックを送信できないので、`TRex Stateless Gui`の画面には表示されません。

|CML2上の名称|TRex Stateless Gui上の名称|
|:--|:--|
|eth0|※表示なし|
|eth1|Port 0|
|eth2|Port 1|

## メニューバー
メニューバーの概要。

尚、`TRex Daemon`は`CML2`で実装されている`TRex`ノードにはサービスがインストールされていないため使用できません。

<table>
  <tr>
    <th colspan=2>メニュー名</th>
    <th>備考</th>
  </tr>
  <tr>
    <td rowspan=3><b>File</b></td>
    <td>Connect/Disconnect</td>
    <td>接続しているTRexから切断</td>
  </tr>
  <tr>
    <td>Preferences</td>
    <td>ロードするファイル等の設定</td>
  </tr>
  <tr>
    <td>exit</td>
    <td>TRex Stateless Guiの終了</td>
  </tr>
  <tr>
    <td><b>Traffic Profiles</b></td>
    <td>Traffic Profiles</td>
    <td>Traffic Profiles画面からトラフィックを作成</td>
  </tr>
  <tr>
    <td><b>Stats</b></td>
    <td>Dashboard</td>
    <td>統計情報の表示</td>
  </tr>
  <tr>
    <td><b>Capture</b></td>
    <td>Open Monitor</td>
    <td>パケットキャプチャの実施（要Service Mode）</td>
  </tr>
  <tr>
    <td><b>TRex Daemon</b></td>
    <td>Open TRex Daemon</td>
    <td>TRex Daemonへの接続（CML2のTRexホストには未実装）</td>
  </tr>
  <tr>
    <td><b>Help</b></td>
    <td>About</td>
    <td>TRex Stateless Guiのバージョン表示</td>
  </tr>
</table>

# トラフィックの生成方法
トラフィックの生成には、メニューバーの「**Traffic Profiles**」から編集画面を開いて作成していく方法と、左ペインのポートに紐付く「**Profile**」から作成していく方法があります。

また、トラフィックを生成して実際に流すまでには以下の作業が必要となります。

1. ポートの基本設定
2. Profileの作成（生成トラフィックの定義）

:::note info
TRex Stateless Guiは名前の通りステートレスなトラフィックを作成するアプリケーションとなります。
TCPの3way Handshakeのようなステートフルなトラフィックを作成することはできません。
:::

## ポートの基本設定
左フレームの「**Port 0**」または「**Port 1**」を選択すると各ポートの設定が表示され、`Acquire`を選択することで、設定を編集、`Release`で編集を終了、`Reset`でデフォルト設定に戻すことができます。

### Controlタブ
ポートの状態や設定を確認できます。

特に変更する必要はありませんが、設定できる項目は`Multicast`、`Promiscuous`、`Service`の3つで、「**IPv6 neighbors**」を確認する場合や、**パケットキャプチャ**を行う場合は`Service`を有効にする必要があります。

![capture_13092021_072144.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/44827034-23e6-48c3-fed5-1ec1f0984539.jpeg)

### Configuration
ポート設定のメインとなる設定。

ポートに指定するMAC＆IP（**Source**）と、通信相手のMAC＆IP（**Destination**）、`TRex`が繋がっているポートがタグVLANのポートの場合はVLANID（**VLAN**）を指定します。

MACアドレスの設定、IPアドレスの設定は「**L2**」、「**L3**」のラジオボタンを選択することで設定できます。

また、「**Ping host**」にアドレスを指定して「**Ping**」を選択することで、指定のホストと疎通確認することも可能です。

IPv6が有効となっているネットワークの場合は、「**Control**」タブの「**Service**」を有効にすることで「**IPv6 neighbors**」をスキャンできます。

トラフィックを送信する際は、「**L2**」もしくは「**L3**」の設定を一度`Apply`しておかないと、生成したトラフィックを送信することができないため、`Apply`しておきます。

![capture_13092021_073146.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2a2d050e-cbd1-2257-f633-7f39d239c74f.jpeg)

### Hardware counters
ポートの統計情報を確認できます。

`TRex`の`ifconfig`の情報を表示しているようです。

![capture_13092021_075034.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/dad37128-12ca-414d-d584-b67867ccb9ba.jpeg)

## Profileの作成
左ペインの「**Profile**」→「**New Profile**」→適当なプロファイル名を入力することでトラフィックを生成するためのプロファイルを作成していきます。

![capture_13092021_081119.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ca6fb9f8-eb88-bc11-0747-348eab9f70d6.jpeg)

画面左の「**Build Stream**」をクリックし、適当なストリーム名を入力して送信するパケットを組み立てていきます。

また、「**Import Pcap**」でパケットキャプチャファイルを読み込ませることもできるので、実際の環境で取得したキャプチャファイルがあるのであれば、「**Import Pcap**」で読みこませて編集しても良いかと思います。

### Stream Properties
どの程度のレートで送信するか、次のストリームはいくつか等の設定を行います。

続けていくつかのストリームを流したい場合などに編集します。

![capture_15092021_072434.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1db0c237-c8a8-c7f9-9412-5f1067e8cfc5.jpeg)

### Packet Editor
実際に流すパケットを組み立てていきます。

MACアドレスやチェックサム等は特に入力しなくても自動で調整されるため、最低限IPアドレス、ポート番号を設定すれば送信できる形になります。

![capture_15092021_080229.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/5f2608aa-db04-b00b-b86a-146511169f20.jpeg)

### Field Engine
「**Add instruction**」でフィールドを追加することで、パケットサイズをランダムに変えたり、チェックサム値を変えたりできるようですが、まだ使いこなせていないため説明は割愛。

![capture_15092021_081000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/122155d3-c139-0e19-291c-a872b21b0d95.jpeg)

## トラフィックの送信
Streamを作成したら、画面上のバーに表示されている実行ボタンを実行することで、作成したトラフィックを送信できます。

パケットキャプチャ等で確認し、指定したトラフィックが送信されていれば成功です。

![capture_20092021_133716.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/9ab23bd2-5d95-ea89-fcdf-7285f571ae95.jpeg)

# おわりに
TCPの3way Handshakeが行えるようならば使い方の幅も広がりますが、`TRex Stateless Gui`ではそこまでの操作はできないようです。

ただ、GUI上で簡単に任意のパケットを作成・送信できるのは、ACL等の確認を行うのに便利なので、簡単な操作だけでも覚えておいたほうが役に立つと思います。