http://allanrbo.blogspot.in/2011/12/raw-sockets-with-bpf-in-python.htmlからコードを取得しました。それが正常に動作しますが、私はポート9000
、80
、22
のような複数のTCPポート上のトラフィックを盗聴したい...複数のTCPポートのパケットを盗聴するためのPythonのBPF
だから私は事は、それは時々、あるブロー
filters_list = [
# Must have dst port 67. Load (BPF_LD) a half word value (BPF_H) in
# ethernet frame at absolute byte offset 36 (BPF_ABS). If value is equal to
# 67 then do not jump, else jump 5 statements.
bpf_stmt(BPF_LD | BPF_H | BPF_ABS, 36),
bpf_jump(BPF_JMP | BPF_JEQ | BPF_K, 9000, 0, 5), <===== Here I added another port
bpf_jump(BPF_JMP | BPF_JEQ | BPF_K, 80, 0, 5),
# Must be UDP (check protocol field at byte offset 23)
bpf_stmt(BPF_LD | BPF_B | BPF_ABS, 23),
bpf_jump(BPF_JMP | BPF_JEQ | BPF_K, 0x06, 0, 3), #<==Changed for TCP "0x06"
# Must be IPv4 (check ethertype field at byte offset 12)
bpf_stmt(BPF_LD | BPF_H | BPF_ABS, 12),
bpf_jump(BPF_JMP | BPF_JEQ | BPF_K, 0x0800, 0, 1),
bpf_stmt(BPF_RET | BPF_K, 0x0fffffff), # pass
bpf_stmt(BPF_RET | BPF_K, 0), # reject ]
ようfilter_list
を変更しました私はコードを完全に理解していませんでした。どんな助け?
答えをありがとう。 2つ以上のポートをフィルタリングする場合、フィルタは何ですか。私は3つのポートを試しました---> 'bpf_jump(BPF_JMP | BPF_JEQ | BPF_K、8084,1,0)、bpf_jump(BPF_JMP | BPF_JEQ | BPF_K、9000,1,0)、bpf_jump(BPF_JMP | BPF_JEQ | BPF_K、22、0 、5)、 '。 Imは '9000'と' 22'のトラフィックしか得ていません。 – Veerendra
@Veerendra:私は3つのポート(まだテストされていませんが、私の答えを編集)。 – Qeole
ありがとう!あなたは私の日を救った:)現在、宛先ポート== '9000'または' 8084'または '22'(私がフィルタに追加したもの)のパケットを取得していますが、興味があるパケットが必要ですports(関心のあるポートは 'source'または' destination'にあります:両方のパケットが必要です!) – Veerendra