問題タブ [tun-tap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - tun/tap インターフェイスを使用した間違ったシーケンス番号
tun/tap を使用して TCP パケットを構造体に読み込もうとしているので、tun デバイスを使用するように IFF_TUN フラグが設定されています (イーサネット ヘッダーなし)。
私は次のような構造体を持っています (エンディアンの問題は気にしません):
TCP ヘッダー:
Ipv4 ヘッダー:
次のようにパケットを読み取ります。
そしてこれまでのところ、とても良いです。しかし、TCPシーケンス番号を読み取ろうとすると、間違った番号が表示されます:
tshark の出力は seq=0 を示します (以下のように):
しかし、私のコード出力は7be53b39 です
c - TUN インターフェイスを作成するコードを実行し、コードで TCP リスニング ポートをシミュレートします。そのため、受信した SYN パケットは、コードで SYN+ACK で応答しました
TUN0 インターフェイスから IP パケットを読み取る単純なサーバーがあります。そして、このコードでは、ポート 80 で TCP リスニング ポートの動作をシミュレートしようとしているので、サーバーと呼びます。したがって、SYN 要求を受け取った場合は、SYN+ACK 応答で応答します。
コードの SYN+ACK パケットが無視されていることを繰り返し確認しており、SYN パケットが再送信され続けています。これはなぜですか?
私の SYN+ACK パケットは問題ないようです。他の誰かもそれをチェックしました。必要に応じて、完全なパケット キャプチャについては以下を参照してください。しかし、私のクライアントは、TCP SYN パケットに対するサーバー コードの SYN+ACK パケット応答を無視しています。
私はnetstatをチェックしました
Linux ReverseのPathフィルタリングも無効にしました
しかし、私の netstat はドロップされたパケットを示していません。クライアントがサーバーの SYN+ACK パケットを単純に無視しているもう 1 つの理由は何でしょうか。そして、クライアントから SYN パケットの再送信を受け続けます。SYN+ACK パケットを拒否する Linux カーネルで実行された魔法のような作業があり、誰もそれを知りません。設定する必要iptableがありますか、最初はこれが必要だとは思いませんでしたが、他に何ができるでしょうか。
これは、初期 SYN および SYN+ACK の 16 進ダンプです。
SYN+ACK
パケット キャプチャは次を示します。
そして、これは完全なパケット キャプチャです。
https://drive.google.com/file/d/1hF8FeQcZqGvAZzxHHRRtO2BOl8Y1Yymn/view?usp=sharing
カーネル バージョン: カーネル 5.13.0-22-generic