でTCPソケットにフィルタを取り付けは、私はTCPソケットを作成するLinuxの
sudo tcpdump tcp -d port 9000
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 8
(002) ldb [20]
(003) jeq #0x6 jt 4 jf 19
(004) ldh [54]
(005) jeq #0x2328 jt 18 jf 6
(006) ldh [56]
(007) jeq #0x2328 jt 18 jf 19
(008) jeq #0x800 jt 9 jf 19
(009) ldb [23]
(010) jeq #0x6 jt 11 jf 19
(011) ldh [20]
(012) jset #0x1fff jt 19 jf 13
(013) ldxb 4*([14]&0xf)
(014) ldh [x + 14]
(015) jeq #0x2328 jt 18 jf 16
(016) ldh [x + 16]
(017) jeq #0x2328 jt 18 jf 19
(018) ret #65535
(019) ret #0
このフィルタを接続すると、プログラムはポート9000に何も送信できません。 しかし、私は1つのinstr出席:
(018) ret #65535
すべてがOKです。 正しいフィルタコードを生成する方法は?
あなたは 'SOCK_STREAM'ソケットでIPヘッダにアクセスすることさえできるのだろうかと思います。私のプログラムはrawソケット上でのみ有効です(私が引用した質問は 'socket(PF_INET、SOCK_RAW、IPPROTO_TCP);を使用しています)、もしそうなら、最後の6つの命令を保持し、' X'レジスタを使用せずにフィールドをロードしてみてください。 – Qeole
ありがとう、私はそれが動作することをテストします。私はSOCK_STREAMを使用してIPヘッダーにアクセスしようとしますlinux bpf拡張子を使用します。 – flypig