バークレーフィルタによってWinPcapセッションのフィルタを手動で設定するCプログラムがあります。今私はPcap.NetでC#でこのツールを転送したいと思います。 Pcap.Netは、引数として生バークレーフィルタを提供していませんが、高レベルのフィルタリング式(もip and tcp
のような例のwireshark/tcpdumpのに使用される)バークレーパケットフィルタからハイレベルフィルタリング式
は
- 「逆コンパイル」バークレーに方法はあります
- がpcap.netにフィルタの生のバイトストリームを使用して、高レベルのフィルタリング発現にパケットフィルタ
生bpf_program:
struct bpf_program bpf_program;
static struct bpf_insn bpf_insn [] =
{
{
BPF_LD + BPF_H + BPF_ABS,
0,
0,
12
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
18,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
0
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
10,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
1
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
8,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
2
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
6,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
3
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
4,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
4
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
2,
0
},
{
BPF_LD + BPF_B + BPF_ABS,
0,
0,
5
},
{
BPF_JMP + BPF_JEQ + BPF_K,
4,
0,
0
},
{
BPF_LD + BPF_W + BPF_ABS,
0,
0,
0
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
4,
0xFFFFFFFF
},
{
BPF_LD + BPF_H + BPF_ABS,
0,
0,
4
},
{
BPF_JMP + BPF_JEQ + BPF_K,
0,
2,
0xFFFF
},
{
BPF_LD + BPF_W + BPF_LEN,
0,
0,
0
},
{
BPF_RET + BPF_A,
0,
0,
0
},
{
BPF_RET + BPF_K,
0,
0,
0
}
};
bpf_program.bf_len = sizeof (bpf_insn)/sizeof (struct bpf_insn);
bpf_program.bf_insns = bpf_insn;
if (channel->type == ETH_P_802_2)
{
bpf_insn [1].code = BPF_JMP + BPF_JGT + BPF_K;
bpf_insn [1].jt = 18;
bpf_insn [1].jf = 0;
bpf_insn [1].k = ETHERMTU;
}
else
{
bpf_insn [1].code = BPF_JMP + BPF_JEQ + BPF_K;
bpf_insn [1].jt = 0;
bpf_insn [1].jf = 18;
bpf_insn [1].k = channel->type;
}
bpf_insn [3].k = channel->host [0];
bpf_insn [5].k = channel->host [1];
bpf_insn [7].k = channel->host [2];
bpf_insn [9].k = channel->host [3];
bpf_insn [11].k = channel->host [4];
bpf_insn [13].k = channel->host [5];
明快に編集:Berkeley Packet Filterは、UNIXベースのシステム用のインターフェイスです。 WinPcapはこのBPFを使用し、Pcap.Netも使用します。 Pcap.Netには、BarkeleyPacketFilter
とも呼ばれるBPFを処理するクラスがあります。クラスは、高レベルのフィルタリング式(tcp port 80
など)のみを受け入れます。
高レベルの表現ではなく、生のフィルタ(上記のコードブロックを参照)を使用してBPFクラスにフィードする方法を検索します。
'生バークレーfilter'は何を? そのリンクは役に立ちますか? https://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Filtering%20the%20traffic – netaholic
[BerkeleyPacketFilter、TCPとポートによるフィルター](https://stackoverflow.com/)の可能な複製質問/ 25675476/berkeleypacketfilter-filter-by-tcp-and-port) – netaholic