अगर मैं कुछ कर्नेल मॉड्यूल लिखते हैं, और उन सभी को में निर्दिष्ट वे पहली बार (या पिछले) नेटफिल्टर हुक कहा जाता है, किस क्रम में वे वास्तव में बुलाया जाएगा किया जाना चाहिए?क्या आदेश netfilter हुक अगर वे सब NF_IP_PRI_LAST या NF_IP_PRI_FIRST निर्दिष्ट करते हैं, में जाते हैं?
netfilter_ops_out.hook = hook_func_out;
netfilter_ops_out.pf = PF_INET;
netfilter_ops_out.hooknum = NF_IP_LOCAL_OUT;
netfilter_ops_out.priority = NF_IP_PRI_FIRST;
ret = nf_register_hook(&netfilter_ops_out);
if (0 > ret) {
printk("Error registering netfilter hook: %d\n", ret);
return ret;
}
netfilter_ops_in.hook = hook_func_in;
netfilter_ops_in.pf = PF_INET;
netfilter_ops_in.hooknum = NF_IP_LOCAL_IN;
netfilter_ops_in.priority = NF_IP_PRI_LAST;
ret = nf_register_hook(&netfilter_ops_in);
if (0 > ret) {
printk("Error registering netfilter hook: %d\n", ret);
return ret;
}
प्रयोगात्मक रूप से, मैं दो मॉड्यूल बनाया है, insmod
उन्हें दो अलग-अलग आदेश में एड - लेकिन वे एक ही परिणाम दे दी है, वहाँ कुछ उपसमूह कि सिर्फ 'पहले पहले आओ की सेवा' नहीं है जिसका अर्थ है। (यह वर्णमाला भी नहीं है ...)
'nf_register_hook()' 'module_init' फ़ंक्शन में कहा जाता है। एक पुराना कर्नेल: 2.6.18। एक मॉड्यूल एक पैकेट को संशोधित करता है, दूसरा लॉग इन करता है, दोनों एक ही पंजीकरण कोड (उपरोक्त) का उपयोग करते हैं। लेकिन इससे कोई फर्क नहीं पड़ता कि मैं मॉड्यूल को किस क्रम में लोड करता हूं, मैं हमेशा रॉकेट में संशोधित पैकेट को देखता हूं। मुझे लगता है कि किसी भी तरह से मुझे संशोधक से पहले लॉगर चलाने में सक्षम होना चाहिए ... लेकिन कोई पासा नहीं। –
क्षमा करें, मेरी व्याख्या सिर्फ इस मुद्दे को भ्रमित करने में घायल हो गई है। मेरे पास चार हुक, प्रत्येक LOCAL_IN और LOCAL_OUT के 2 हैं। दोनों मॉड्यूल इनकमिंग और आउटगोइंग दोनों पर हुक करते हैं, लेकिन मैं केवल इनकमिंग पर ध्यान केंद्रित कर रहा हूं। –