問題タブ [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.

0 投票する
1 に答える
447 参照

freebsd - FreeBSD で SIOCIFDESTROY を使用するには?

私のアプリはタップ インターフェイスを作成し、すべてがうまく機能します。しかし、FreeBSD では、終了時にタップ インターフェイスが残ります。削除するには、次のコマンドを手動で実行する必要があります。

しかし、アプリケーション内でこれをプログラムで実行したいと考えています。SIOCIFDESTROY のドキュメントはどこにありますか? アプリが終了したときに試したことは次のとおりです。

この時点で err はゼロですが、アプリが終了してもタップ インターフェイスは存在します。他に何が欠けているか知っている人はいますか?

0 投票する
1 に答える
2646 参照

linux - VPN over TCP 接続を作成する

TCP 接続を介して仮想 IP ネットワークを作成する必要があります。ホスティング システムは Linux で、TUN/TAP カーネル ドライバーを使用しているため、仮想ネットワークの IP パケットを簡単に受信して再注入できます。

難しいのは、受信した IP パケットを別のホストに送信することです。技術的でない理由により、UDP ではなく TCP プロトコルでのみパケットを送信できます。UDP 経由で IP パケットを送信するのは簡単ですが、TCP を使用すると難しくなります。理由は次のとおりです。

UDP プロトコルは、IP と同様に、再送信/並べ替えをサポートしていません。そのため、受信した仮想 IP パケットごとに 1 つの UDP パケットが送信された場合でも、カーネル TCP/IP プロトコル スタックは仮想 IP パケットの損失/重複/再順序付けを認識します (これらの「機能」があれば、TCP/IP が適切に機能するために必要です)。ない場合、仮想ネットワークの TCP 接続速度が低下します)。IP パケットが TCP 経由で送信される場合、何らかの方法でシミュレートされない限り、必要なすべての「機能」が失われます。

TCP 接続である種のパケットの重複/損失/並べ替えを偽装するか、カーネル TCP/IP プロトコル スタックにパッチを当てる必要があるようです。どちらのオプションも簡単ではありません。

私の問題に対する他の簡単な解決策はありますか? または、完全に間違った方向に進んだだけですか?ぜひ聞きたいです。

====更新====

受信した仮想ネットワーク IP パケットを送信するために、生の IP ソケット (TCP パケットを使用しながら、物理ネットワーク上のすべての TCP 再送信/並べ替えを簡単に取り除くことができる) を使用することを考えています。しかし、受信ホストで、関心のあるパケットのみを受信し、他のすべての IP パケットをカーネル TCP/IP スタックに返すにはどうすればよいでしょうか?

0 投票する
1 に答える
453 参照

c++ - 不完全な型 'struct ifmediareq' (ioctl)

ソースコードを書き直そうとしていますが、次の機能があります。

ただし、コンパイルしようとすると、次のエラーが表示されます。

SIOCGIFMEDIA 行をコメントアウトすると、すべて正常にコンパイルされます。私が間違っていることは何か分かりますか?これも私のインクルードからのスニペットです:

0 投票する
0 に答える
1261 参照

linux - Linux マシンで tun/tap インターフェイスを作成するための上限はありますか? また、限界まで制約を課すパラメータは何ですか?

私は ns-3 (通信ネットワーク シミュレータ) 通信シミュレータに取り組んできました。ここでは、TapBridge メカニズムと呼ばれる、外部データ ソースを通信ノードにインターフェイスするための規定があります。ただし、データ ソースごとにタップ デバイスを Linux OS ブリッジ上に作成し、ns-3 のノードとの接続を確立する必要があります。多くのデータ ソース (たとえば 5000) を接続する必要があるため、それらの多くのタップ デバイスを作成し、ns-3 の通信ノードとの対応する接続​​を確立する必要がありました。Linux マシンで tun/tap インターフェイスを作成するための最大制限はどれくらいですか? また、その制限に制約を課すパラメータは何ですか?

前もって感謝します。-- ゲリ

0 投票する
1 に答える
778 参照

linux - raw バイト データをタップ デバイスに送信するときに、先頭の 4 バイト データが失われるのはなぜですか?

私は Linux の tun/tap デバイスを学んでいます。ここで私がやったことを理解できない小さな問題があります:

1: タップ デバイスを作成します。名前は「tap1」です。ファイル記述子を取得します: tapfd

2: buf[2048] のように、十分に大きな配列を準備します。

3: イーサネット フレームを buf に書き込みます。その中には、合計 74 バイトの ip(udp) パケットがあります。次のような不器用な方法でそれを行いました:

4: write() を呼び出し、上記の [74 バイト] を [tapfd] に送信します。

5: 「tcpdump -i tap1 -vv」を使用して確認しますが、結果は以下のとおりです。

合計 = 56 バイト + 12 バイト mac src&dst + 2 バイト eth タイプ = 70 バイト では、先頭の 4 バイトはどこですか?

最初に、先頭の 4 バイトは「プリアンブル & フレーム区切り文字の開始」である必要があると考えましたが、wiki によると、プリアンブルは 7 オクテットで、フレーム区切り文字の開始は 1 オクテットでした。

6: 次に、[buf] に 4 バイトを挿入すると、buf は次のようになります。

次に、もう一度確認してください。今度は、tcp ダンプから、これが正当なイーサネット フレームであることがわかりました。

できます!しかし、なぜ?先頭の 4 バイトが欠落しているのはなぜですか?(不正な udp チェックサムは無視してください)

0 投票する
0 に答える
159 参照

networking - TAP を使用して着信 eth パケットをスニッフィングまたは変更する

私はhttps://github.com/TOGoS/TUN2UDPを試しました

これにより、次のことが可能になります。

私がやりたいことは次のとおりです。

言い換えれば、着信パケットをレイヤー 2 でインターセプトし、それらをブロック、変更、または通過するように制御したいと考えています。

おそらく ETH と TAP をブリッジすることが鍵だと思いますが、必要な方法でこのブリッジにプログラムでアクセスする方法がわかりません。

0 投票する
1 に答える
2257 参照

linux - tun デバイスで raw IP パケットを送信する

TUN deviceを介してプログラムで IP パケットを構築して送信しようとしています。

TUN デバイスと適切なルートをセットアップしました。

その結果:

IP 転送がオン:# echo 1 > /proc/sys/net/ipv4/ip_forward

tun0パケットの NAT をセットアップしました。

ICMP次に、パケットを生成するための Python スクリプトがあります。

tun0インターフェイスから発信されたパケットを確認できます。

しかし、wlp3s0インターフェースはサイレントなので、パケットはNATされず、wlp3s0私のWLANカードであるインターフェースにルーティングされないようです。

私が見逃しているアイデアはありますか?