回答編集履歴
1
うまくparse出来てない箇所があったので、改行などを入れ修正。
answer
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.4
|
41
41
|
169.254.0.0/16 dev eth0 scope link metric 1002
|
42
42
|
169.254.0.0/16 dev eth1 scope link metric 1003
|
43
|
-
default via 10.0.2.2 dev eth0
|
43
|
+
default via 10.0.2.2 dev eth0
|
44
44
|
```
|
45
45
|
|
46
46
|
着目すべき点は、defaultな経路としては、eth0が選ばれているということ。
|
@@ -116,6 +116,7 @@
|
|
116
116
|
return 0;
|
117
117
|
}
|
118
118
|
```
|
119
|
+
|
119
120
|
肝は普通見かけないクライアントソケットへのbind。ここでアドレスを指定している。
|
120
121
|
|
121
122
|
以下でコンパイル/実行出来る。
|
@@ -123,12 +124,14 @@
|
|
123
124
|
$ g++ -g client.cpp
|
124
125
|
$ ./a.out
|
125
126
|
```
|
127
|
+
|
126
128
|
※-gはデバッグ用のオプション
|
127
129
|
|
128
130
|
そして、今回は通信するパケットをキャプチャするためにtcpdumpを使用。上記の実行に先立って別端末から起動しておく。
|
129
131
|
```text
|
130
132
|
sudo tcpdump -v -i eth0 port 80
|
131
133
|
```
|
134
|
+
|
132
135
|
eth1から出ていくと思っていたが、経路設定どおり、eth0から出ていくため、eth0でキャプチャしている。
|
133
136
|
|
134
137
|
# 結果
|
@@ -170,4 +173,5 @@
|
|
170
173
|
11:02:44.661208 IP (tos 0x0, ttl 64, id 37650, offset 0, flags [DF], proto TCP (6), length 40)
|
171
174
|
192.168.56.4.39408 > 10.0.2.2.http: Flags [.], cksum 0x21c9 (correct), ack 5176, win 26980, length 0
|
172
175
|
```
|
176
|
+
|
173
177
|
一部チェックサムがincorrectになっているが、通信自体は出来ており、eth0を使用し、アドレスにはeth1のアドレスが使用されている。サーバ側でアドレスを取ろうとしたが、NATでIP偽装されており、127.0.0.1になっていたため、そちらは未確認。
|