teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

うまくparse出来てない箇所があったので、改行などを入れ修正。

2019/11/18 02:14

投稿

退会済みユーザー
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になっていたため、そちらは未確認。