# 課題の解説(02) ## 問題1 ````markdown # 問題1 自分のマシンのイーサネットインターフェースを確認してみよう。 この仮想マシンには、仮想マシンと言え外部とのネットワークに繋がるインターフェースが存在しています。 このインターフェース名を調べて、ファイルに書き残してください。 ## 調べ方 このLinux仮想マシンには、`ip`コマンドが用意されています。 サブコマンド `link` にて現在使えるインターフェースの一覧が出ます。 また、サブコマンド `addr` にて(正しくは`address`)を使って取得しているアドレス情報が確認できます。 ## やるべきこと - `ip link` コマンドを実行して、イーサネットインターフェースの名前を確認する - `ip addr` コマンドを実行して、イーサネットインターフェースのIPアドレスを確認する - 確認したイーサネットインターフェースの名前とIPアドレスをファイルに書き残す 提出先ファイルは、このディレクトリに用意している `research.txt` とします。 ファイル内に `(ここを書き換えて使用)` 書いてある場所がありますから、それぞれ削除して確認した結果を入れてください。 書き込み後の保存・提出(commit/push)を忘れずに! ```` こちらは、Linux環境(授業用VM)のターミナルをVS code(のリモート接続)で接続していれば、以下のコマンドで確認できます。 ```bash $ ip link ``` このうち、enp0s?(数字)のような名前がついているものがイーサネットインターフェースです。 - en: イーサネットのこと - pN: PCIバスのこと(Nは数値、内部で識別に使うバス番号) - sM: スロットのこと(Mは数値、内部で識別に使うスロット番号) 作者(佐藤)の環境だと(Apple Silicon)では、`enp0s8`となりましたが、環境による差違はあると思います。 次にIPアドレスの確認です。 ```bash $ ip addr ``` こちらで前述の見つけたインターフェースの`inet`部分を確認すると、IPアドレスがが確認できます。 ということで、両者の値を`resarch.txt`の該当箇所を書き換えればOKです。 ## 問題2 ````markdown # 問題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`での取得を試みてみましょう。 ### ツールのインストール ```bash $ sudo apt update # aptリポジトリ更新(ソフトウェアの一覧みたいなもの) $ sudo apt install -y tcpdump # tcpdumpをインストール ``` ```{note} `-y`: Yesのこと、途中で質問があれば自動でYesと答えるオプションです。 ``` ### パケットの取得 ```bash $ sudo tcpdump -c 10 -w dump.pcap ``` とすることで、開始後の10パケットを収集します。 取得後、どのようなデータだったのかの概要は`-r`で読み込むことで確認できます。 ```bash $ tcpdump -r dump.pcap ``` このファイルを提出すればOKですが、取得した場所に注意してください。 エクスプローラー側を参照し、`ex2`フォルダ内に置かれているかを確認してください。 違っていたらドラッグ&ドロップで移動させることができるので対応して、コミットして提出しましょう。 ## 問題3 評価自体は問題2まででここはおまけです。 ```bash $ cd ex3 # 移動しておく $ uv sync $ uv venv $ uv run main.py ``` これでscapyライブラリをインポートして、`ex2/dump.pcap`を読み込んで解析してくれます。 要は**Pythonでもこういうファイルの処理ができるんですよ**ということの確認用です。