skbをprerouting
Linuxネットワークスタックにプッシュしたい。これを行う方法はありますか? 私はdev_queue_xmit()
とnetif_rx()
関数を使用しましたが、私は彼らがprerouting
Linuxネットワークスタックのskbを押すことはできないと思います。Linuxネットワークスタックの特定のポイントでskbを押す方法は?
答えて
私はあなたのlibpcapまたはlibnetfilter_queue以下、まとめてユーザランドキューイングと呼ばれたいと思います。ユーザーランドのキューイングは、あなたが定義したいくつかのルールに一致するすべてのパケットをユーザランドアプリケーションにルーティングします。 dev_queue_ *関数とnetif_ *関数はカーネルレベルのルーティングに適用され、ユーザランドアプリケーションには関係ありません。
ユーザーランドのキューイングにはパフォーマンス上の影響があり、使用するライブラリによっては、パケットをネットフィルターのキューに再注入する特定の方法を使用する必要があります。
私は完全にはっきりしていませんここではこのskb由来です。ユーザーランドでは、これを行うには2つの方法があります。 1つは、tun
デバイスを使用することです(単純にパケットを書き込む)。もう1つは、libpcap
(これは受信パケットの中に隠された生のパケットを送信することがほとんど知られていません)を使用することです。
ioctl
(おそらく独自にioctl
を追加することを意味する)を登録し、次にユーザースペースからioctl
を呼び出すことで、これを行うとします。カーネルを変更せずにこれを達成できるときに、なぜそれをやりたいのかがすぐに分かりません。しかし、もしあなたがこれをやりたければ、私がすることはtun
ドライバーが使用するパスに従って、write()
-tun
デバイスの新しいioctl
に相当することに相当します。これは、パケットのソースとして機能するために、tun
のようなインターフェイスがぶら下がっていることを意味するかもしれません。私はシステム内のパケットが疑わしいのソースインターフェイスの種類が必要です。
これはパケットのペイロードがユーザスペースから作成された後、私はこのパケットを自分のカーネルモジュールにioctlしたいのですが、ユーザスペースからパケットを取得し、新しいskbを割り当ててパケットペイロードを追加することを知っています。ネットワークスタックのポイントを事前にルーティングすることができます。 –
なぜこの場合、 'netif_rx()'が間違っていると思いますか?これ(正確には 'netif_rx_ni()')は 'drivers/net/tun.c'が使用するものです。私はあなたの問題が間違った機能を呼んでいるのではないと思っていますが、あなたの 'skb 'がインターフェイスから来ていると追跡されていない限り(あなたのものではない)、あなたが意図したように入力インターフェースを調べる事前ルールがどのように機能するか)。これが私が 'tun'デバイスの使用を提案し、カーネルが変更されない理由です。 – abligh
@abligh:私はnetfilterのルーティング前のフックハンドラでskb_copy()を行い、そのデータを変更して、元のskbの隣に戻して再注入したい。各受信パケットは2つのパケットに変換され、別々にルーティングされます。私はNF_ACCEPTを返す前にリンクされたリストを介してコピーされたskbを合法的なものに貼りつけようとしましたが、うまくいかなかった。これにどのようにアプローチするのか?ありがとう。 – wick
私はあなたのカーネルのバージョンと、より精巧な可能性があり
- 1. linuxネットワークスタックのソースコードを学ぶ方法
- 2. iPhoneのUIView特定のポイントでレイヤーをレンダリングする方法は?
- 3. ライブラリの特定のディレクトリでcmakeをポイントする方法は?
- 4. Android - 特定のポイントで手紙を書く方法は?
- 5. skbのヘッダーフィールドに値を設定する
- 6. Linuxネットワークスタックは、マルチコアマシン上で並列に動作しますか?
- 7. アクティビティを特定のポイントまでスクロールする方法はありますか?
- 8. ボタンを押したリストボックス項目を特定する方法は?
- 9. Linuxのsk_buffでは、skb-> dataは物理アドレスか仮想アドレスですか?
- 10. 無限ループ内の特定のポイントに戻る方法
- 11. freebsd/linuxの特定のコアにプロセスをバインドする方法
- 12. アプリケーション特定のポイントでクラッシュする
- 13. メソッドに渡さずに特定のCCSpriteをポイントする方法は?
- 14. Linux/CentOS:特定のイーサネットアダプタをFTP/SSHに強制する方法
- 15. linuxの特定のポートへのトラフィックを知る方法
- 16. TChart - 一連の特定のポイントにポイントを追加する
- 17. スケジューラで各プロセスを特定のコアに固定する方法(Linux)
- 18. 特定のポイントでマウスクリックを受け取るControl/Windows Handle/AutomationElementの入手方法?
- 19. X Windows/LinuxでWindowsの可視領域を特定する方法は?
- 20. QtでWindowsとLinuxでCtrl + Cを押す方法
- 21. 特定のディレクトリのNginxサブドメインをポイント
- 22. Xcode UITestsを使用して特定のポイントをタップする方法
- 23. MySQLは特定のポイントまで行を削除します
- 24. Javaの特定のポイントから別のポイントへのループ?
- 25. Scatterplot(qplot)内のポイントを特定
- 26. 特定のポイントからscrolldivを開始
- 27. 特定のタイプの最後に押されたボタンを追跡する方法
- 28. ポイントのグループの決定方法
- 29. Enterキーを押したときに特定のボタンをクリックする方法
- 30. 特定のポイントからのループスルーリスト?
など、フィルタ、IPV4の実装は表のチェックを開始どこである、あなたが探している機能が
ip_queue_xmit()
でくださいと思いますか?カーネルのバージョンがなくても難しいです。 – HighOnMeat@ペガサス私はカーネル3.2を使用しています –
本当に達成しようとしていますか?どこから出発するのにskbを押してみたいですか?私は詳細を教えてください –