課題の解説(02)

問題1

# 問題1

自分のマシンのイーサネットインターフェースを確認してみよう。

この仮想マシンには、仮想マシンと言え外部とのネットワークに繋がるインターフェースが存在しています。
このインターフェース名を調べて、ファイルに書き残してください。

## 調べ方

このLinux仮想マシンには、`ip`コマンドが用意されています。
サブコマンド `link` にて現在使えるインターフェースの一覧が出ます。
また、サブコマンド `addr` にて(正しくは`address`)を使って取得しているアドレス情報が確認できます。

## やるべきこと

- `ip link` コマンドを実行して、イーサネットインターフェースの名前を確認する
- `ip addr` コマンドを実行して、イーサネットインターフェースのIPアドレスを確認する
- 確認したイーサネットインターフェースの名前とIPアドレスをファイルに書き残す

提出先ファイルは、このディレクトリに用意している `research.txt` とします。
ファイル内に `(ここを書き換えて使用)` 書いてある場所がありますから、それぞれ削除して確認した結果を入れてください。

書き込み後の保存・提出(commit/push)を忘れずに!

こちらは、Linux環境(授業用VM)のターミナルをVS code(のリモート接続)で接続していれば、以下のコマンドで確認できます。

$ ip link

このうち、enp0s?(数字)のような名前がついているものがイーサネットインターフェースです。

  • en: イーサネットのこと

  • pN: PCIバスのこと(Nは数値、内部で識別に使うバス番号)

  • sM: スロットのこと(Mは数値、内部で識別に使うスロット番号)

作者(佐藤)の環境だと(Apple Silicon)では、enp0s8となりましたが、環境による差違はあると思います。

次にIPアドレスの確認です。

$ ip addr

こちらで前述の見つけたインターフェースのinet部分を確認すると、IPアドレスがが確認できます。

ということで、両者の値をresarch.txtの該当箇所を書き換えればOKです。

問題2

# 問題2

パケットダンプを取得してみよう

私たちはこのホスト(network)には常に仮想ネットワーク越しにですが接続しています。
そのため、常時通信が発生しており、フレームが常に飛び交っています。
ここではそんなフレームを少しだけ握ってみましょう。

## パケット取得ツールを入れる

(略)

## パケットをダンプしてみる

ではダンプしてみましょう。

```bash
$ sudo tcpdump -c 10 -w dump.pcap
```

```{note}
`-c 10`:
    10パケット取得するオプションです。
`-w dump.pcap`:
    取得したパケットを`dump.pcap`というファイルに保存するオプションです。
```

これでパケットのダンプ記録が取得できました。ファイルは`dump.pcap`となっているので、ファイルの存在とサイズを確認しておきましょう。


## 取得したパケットを解析してみる

取得したパケットの解析は、やはり `tcpdump` にて行えます。

```bash
tcpdump -r dump.pcap
```

```{note}
`-r dump.pcap`:
    `dump.pcap`というファイルを読み込むオプションです。
```

結果として取得したパケットのIPレベルの情報が出るようになっています。

取得例(冒頭のみ)
```
reading from file dump.pcap, link-type EN10MB (Ethernet), snapshot length 262144
04:49:15.325913 IP 10.0.2.15.ssh > 10.0.2.2.49912: Flags [P.], seq 2938324253:2938324433, ack 110316435, win 65535, length 180
04:49:15.326024 IP 10.0.2.2.49912 > 10.0.2.15.ssh: Flags [.], ack 180, win 65535, length 0
...
```

また、データリンクレベルを見たいのであれば、 `-e`を付加することで横長になりますが情報が増えます。

```bash
$ tcpdump -e -r dump.pcap
```

```{note}
`-e`:
    データリンクレベルの情報を表示するオプションです。
```

取得例(冒頭のみ)
```
reading from file dump.pcap, link-type EN10MB (Ethernet), snapshot length 262144
04:49:15.325913 08:00:27:c4:26:52 (oui Unknown) > 52:55:0a:00:02:02 (oui Unknown), ethertype IPv4 (0x0800), (長いので略)
...
```

問題1の結果とあわせることで、この2つのMACアドレスのうち、どちらがVirtualBoxのVMとなっているかがわかると思います。

(以下略)

パケットダンプをする練習です。GUIツールとしてはWiresharkなど有名なものもありますが、ここでは基本ツールであるtcpdumpでの取得を試みてみましょう。

ツールのインストール

$ sudo apt update                   # aptリポジトリ更新(ソフトウェアの一覧みたいなもの)
$ sudo apt install -y tcpdump       # tcpdumpをインストール

注釈

-y: Yesのこと、途中で質問があれば自動でYesと答えるオプションです。

パケットの取得

$ sudo tcpdump -c 10 -w dump.pcap

とすることで、開始後の10パケットを収集します。

取得後、どのようなデータだったのかの概要は-rで読み込むことで確認できます。

$ tcpdump -r dump.pcap

このファイルを提出すればOKですが、取得した場所に注意してください。 エクスプローラー側を参照し、ex2フォルダ内に置かれているかを確認してください。 違っていたらドラッグ&ドロップで移動させることができるので対応して、コミットして提出しましょう。

問題3

評価自体は問題2まででここはおまけです。

$ cd ex3        # 移動しておく
$ uv sync
$ uv venv
$ uv run main.py

これでscapyライブラリをインポートして、ex2/dump.pcapを読み込んで解析してくれます。 要はPythonでもこういうファイルの処理ができるんですよということの確認用です。