問題タブ [bpf]
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.
filter - Linux カーネル用の Berkeley Packet Filter を作成してデバッグする方法
大量のネットワーク トラフィックでパケットをフィルタリングするために、Linux でカーネル パケット フィルタを開発する方法を探しています。
Linux カーネルにブルーム フィルターを実装するために、Berkeley Packet Filter (BPF) を使用することが可能かどうかお尋ねしたいと思いますか? カーネル フィルターを実装する代替のより良い方法はありますか?
BPF 構文はかなり低レベルで理解しにくいです。BPF を記述するための高レベル/簡単な方法と、開始するのに適した例/参照/チュートリアルはありますか? また、開発中に BPF をデバッグする方法は?
networking - TCPdump での BPF フィルターの分解
この TCPdump BPF スタイル フィルタを分解しようとしており、助けが必要です:
ここから取った
何が起こっているのかをよりよく理解するために取った手順:
これが私が混乱したところです。上で提供したハイパーリンクの説明は、
multiply it by four ( (tcp[12:1] & 0xf0)>>2 ) which should give the tcp header length
ゼロだと無理。お願いします:
- 計算の間違いを見つけるのを手伝ってください (TCP ヘッダーと IP ヘッダーを混在させているのではないでしょうか?);
- 私の論理が正しいかどうかについてのガイダンスを提供してください。
これはパケットです:
linux - SO_ATTACH_BPF ソケット オプションをサポートするように Linux カーネルをビルドする方法は?
eBPF
をサポートするアプリケーションをビルドしたいCentOS 7
(カーネルのバージョンは です3.10.0
):
そこで、4.0.5
バージョンをダウンロードし、次の構成を行います。
次に、このリンク4.0.5
に従って、カーネル をビルドしてインストールします。
を実行make modules_install install
した後、まだSO_ATTACH_BPF
inがないことがわかり<asm-generic/socket.h>
ました。そのため、上記のコードは正常にコンパイルできません。
SO_ATTACH_BPF
ソケットオプションをサポートする Linux カーネルをビルドするには?
pcap - 「vlan」を使用した Libpcap フィルター文字列の動作がおかしい
libpcap pcap_compile を使用すると奇妙なエラーが発生します これらが既知の問題なのか、それとも bpf のフォーマットや順序付けに誤りがあるのか教えてください
例えば:
1) (protocol_filter と vlan_filter) を渡すと、パケットが表示されません: Like ((arp or udp port 234) and vlan 12) しかし、exp を (vlan_filter and protocol_filter) と交換すると、パケット フィルタリングが機能します: Like ((vlan 12) および (arp または udp ポート 234))
2) 「not」プロトコルで vlan を含めると、プロトコル フィルターが適用されたパケットが取得されます。例: (((vlan 20)) and (not (udp port 3800)) and ((not (tcp)) and (not ( udp ポート 53)) および (not (icmp)) および (not (ip6)) および (not (udp ポート 5353))))
プロトコルに vlan を含めない場合、bpf が (not (udp port 3800)) and ((not (tcp)) and (not (udp port 53)) and ( の場合、tcp、icmp、ip6 などを含むすべてのパケットを取得します。 not (icmp)) および (not (ip6)) および (not (udp ポート 5353))))
3)(((not vlan)) および (not (udp ポート 3800)) および ((not (tcp)) および (not (udp ポート 53)) および (not (icmp)) および (not (ip6)) および(not (udp port 5353)))) ip6、tcp などを含むすべてのパケットを取得します
(((not vlan)) and (not (udp port 3800)) and (((tcp)) or ((udp port 53)) or ((icmp)) or ((ip6)) or ((udp port 5353) ))) 単一のパケットすら取得しない
tcpdump - BPF (Berkeley Packet Filter) または tcpdump でメモリ スクラッチ スペース 15 が使用されるのはいつですか?
私の質問は tcpdump コマンドに関するものです。コマンド "tcpdump -i eth1 -d" は、フィルターに関係するアセンブリ命令を一覧表示します。どの命令も M[15] (メモリ スロット 15) にアクセスしていないことを知りたいです。
このメモリスロットを使用するフィルタはありますか? 何のために予約され、どのように使用されますか?
linux-kernel - BPF を使用してカーネル関数の引数をフィルタリングする方法は?
Berkeley Packet Filter (BPF) を使用してカーネルで関数の引数をフィルタリングする方法は? 関数は、システム コールだけではなく、インライン以外の関数である必要があります。また、検証のために関数の引数内のポインターを逆参照できるようにすることをお勧めします。
インターネットで検索しましたが、使用例が見つかりません。ほとんどの資料は、seccomp / seccomp-BPF の使用方法のみを説明しています。
フックを実装するために eBPF と kprobe/jprobe が統合されているようです。しかし、ウェブ上で良い例を見つけることができません。
freebsd - FreeBSD カーネルで bpf_filter() の戻りコードは何ですか? 各戻りコードの意味は何ですか?
FreeBSD カーネルで bpf_filter() の戻りコードは何ですか?
各戻りコードの意味は何ですか?
この問題に関するマニュアル ページ (リンク)は明確ではありません。
このbpf_filter()
関数は、パケット pkt の pc から始まるフィルター プログラムを実行します。wirelen 引数は元のパケットの長さで、buflen は存在するデータの量です。の buflen 値0
は特別です。これは、pkt が実際には mbuf チェーンへのポインターであることを示しています ( struct mbuf *
)。
戻り値
フィルタがない場合、bpf_filter()
関数は戻ります-1
(符号なし整数にキャスト)。それ以外の場合は、フィルター プログラムの結果を返します。
65535
一致するときと一致しないときに取得して0
います。戻り値の意味がわかりません65535
。
誰かがリターンコードを詳しく説明してもらえますかbpf_filter()
?