3
我從http://allanrbo.blogspot.in/2011/12/raw-sockets-with-bpf-in-python.html得到了代碼。它工作正常,但我想嗅探多個TCP端口像端口9000
,80
,22
交通......python中的BPF來嗅探多個TCP端口的數據包
所以我已經修改了filter_list
像打擊
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 ]
的事情是,有時有時候它不是工作,就像只有9000而不是80的流量,有時80的流量。我沒有完全理解代碼。任何幫助?
感謝您的回答。如果我想過濾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),'。我只有'9000'和'22'的流量。 – Veerendra
@Veerendra:我編輯了三個端口的答案(儘管如此還沒有測試過)。 – Qeole
謝謝!你保存了我的一天:)現在我得到的數據包是哪個目的端口=='9000'或'8084'或'22'(無論我們在過濾器中添加了什麼),但我需要兩種方式,比如我需要有興趣的數據包端口(有興趣的端口可以在'source'或'destination':需要兩個包!)任何幫助? – Veerendra