إعادة كتابة حزم الشبكة أثناء الطيران باستخدام libnetfilter_queue

StackOverflow https://stackoverflow.com/questions/4283043

  •  28-09-2019
  •  | 
  •  

سؤال

أحاول كتابة تطبيق مساحة المستخدمين يمكنه ربط مكدس شبكة نظام التشغيل ، وحزم شم الطيران في الماضي وتحرير تلك التي تهتم بها.

بعد الكثير من googling ، يبدو لي أن أبسط طريقة (ولكنها قوية بشكل معقول) للقيام بذلك (على أي منصة) هي Linux libnetfilter_queue مشروع. ومع ذلك ، أواجه مشكلة في العثور على أي وثائق معقولة للمشروع ، خارج المحدود الرسمية توثيق. ميزاتها الرئيسية (كما ذكر الرابط الأول)

  • تلقي حزم قائمة انتظار من نظام kernel nfnetlink_queue
  • إصدار أحكام و/أو تعزيز الحزم المعدلة إلى نظام kernel nfnetlink_queue

التركيز هو بلدي. كيف أقصد بالضبط أن أذهب إلى هذا؟ لقد حاولت تعديل عينة تم توفير الكود ، لكن ربما أساء فهم شيء ما. الكود يعمل في NFQNL_COPY_PACKET الوضع ، لذلك أنا صباحا استلام الحزمة بأكملها - ولكن يبدو أن تعديلات على ذلك مقصورة على طلبي الخاص - كما يتوقع المرء ، بالنظر إلى دلالات "النسخة".

شعوري هو أنني من المفترض أن أستفيد من NF_QUEUE بطريقة ما ، لكنني لم أكن أهدئها تمامًا. أي مؤشرات؟

(إذا كانت هناك آلية أبسط للقيام بذلك ، والتي هي أيضًا منصة متقاطعة ، أحب أن أسمع عنها!)

هل كانت مفيدة؟

المحلول

لا أصدق أنني فاتني هذا سابقًا. وبقدر ما أقوم بنشر أسئلة على ذلك ، اعتقدت أنني لن أعمل أبداً على هذا بنفسي. قون

لم أنظر إلى النموذج الأولي للوظيفة بشكل صحيح. اتضح في وظيفة "الحكم" (الموضحة أدناه) ،

int nfq_set_verdict(struct nfq_q_handle *qh,
    u_int32_t id,
    u_int32_t verdict,
    u_int32_t data_len,
    const unsigned char *buf     
)

آخر المعلمتين هي أن تكون البيانات عاد إلى مكدس الشبكة. من الواضح بعد فوات الأوان ، لكنني فاتني ذلك تمامًا كما print_pkt الوظيفة لا تأخذ بيانات الحزمة كمعلمة ، ولكنها تستخرجها من struct nfq_data.

المفتاح هو NF_ACCEPT الحزمة وتمرير الحزمة المعدلة بشكل مناسب إلى kernel.

نصائح أخرى

مجرد تخمين وحشي من الحفر حول الكود المصدر: حاول إضافة حمولة مشوهة بشكل صريح باستخدام nfnl_addattr_l(…, NFQA_PAYLOAD, …)?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top