ポイントアンドクリックデバイスの使い方を完全に理解するのが困難です。
Tapデバイスを作成して実行してみました。ユーザー空間プログラムはファイル記述子を開き、デバイスに送信されたイーサネットフレームを受信します。 Tapデバイスは10.254.0.1/24のIPアドレスとネットマスクを取得します。
今まではそんなに良くなった。echo "test" | netcat -uq0 10.254.0.2 12345
プログラムがパケットを受信し、異なる通信方法を介して別のシステムに転送するプログラムを作成しました。
しかし、反対のアプローチはまったく機能しません。
ユーザ空間プログラムは、有効なイーサネットフレームをタップデバイスのファイル記述子に書き込む。しかしAはnetcat -ul 12345
何も受けなかった。と同じですsocat
。また、ブリッジを作成してここにタブデバイスを追加してみましたが、やはり機能しませんでした。
WiresharkでTapデバイスを監視すると、すべてのパケットが表示され、すべてのパケットが正しいため混乱します。コマンドの
カウンタは、ユーザ空間プログラムがTapデバイスに書き込むフレームごとにインクリメントされます。これでIPパケットのみが処理されるため、ARPは無効になります。tx packets: XY
ifconfig
ip link set dev tap0 arp off
私の設定は次のように想像できます。
host1 (some channel) host2
netcat --> tap0 --> prog ---------------> prog --> tap0 --> netcat
<=============== works ========================================>| does not work
Tapデバイスの「もう一方の端」でパケットを受信する方法を知っていますか?それともどこでもっと読むことができますか?
編集2:修正が削除されました。 (間違ったテストの結果、間違った結論が出ました。チェックサムに問題がありました。パケットは有効ですが受信されません。)
ベストアンサー1
いくつかのさらなる調査が原因をnetstat -s
見つけるのに役立ちました。逆方向パスフィルタが私のパケットを削除していました。 (まだ理由を完全に理解していない...)
操作するには、タブデバイスのフィルタを緩和モードに設定します。
sudo sysctl -w net.ipv4.conf.tap0.rp_filter=2
(これを設定して無効にします0
。いいえ私のために動作します。 )