मैं एक बहुत ही उच्च यातायात नेटवर्क के लिए निगरानी कार्यक्रम लिख रहा हूं (एचडी वीडियो नेटवर्क के माध्यम से स्ट्रीम किए जाते हैं)। अधिकांश पैकेट बहुत बड़े होते हैं और मैं केवल हेडर (आईपी और यूडीपी/टीसीपी) देखना चाहता हूं। बेशक मैं पूरे डेटा की प्रतिलिपि बनाने के ऊपरी हिस्से से बचना चाहता हूं। क्या libpcap अनिवार्य रूप से मुझे एक पूरे पैकेट की प्रतिलिपि देता है? यदि हां, क्या कोई पुस्तकालय है जो मेरी ज़रूरतों से मेल खाता है?क्या libpcap हमेशा पैकेट की प्रति बनाते हैं?
उत्तर
यहां दो सवाल प्रतीत:
- शीर्षक में से एक है, जो के रूप में अगर यह है कि क्या libpcap प्रतियां पैकेट पूछ रहा है लगता है,
- शरीर में से एक यह पूछता है कि क्या यह हमेशा संपूर्ण पैकेट की प्रतिलिपि बनाता है।
पहला सवाल के लिए:
संभवतः तंत्र है जिसके ऊपर libpcap विभिन्न OSes में चलाता उपयोग कर किसी भी कोड के द्वारा किया कम से कम एक प्रतिलिपि है - mbufs से एक कॉपी/skbuff/स्ट्रीम्स बफ़र्स/जो कुछ भी करने के लिए तंत्र का बफर लिनक्स के लिए, जब tpacket तंत्र उपयोग नहीं किया जा रहा है, तो skbuff PF_PACKET
सॉकेट libpcap का उपयोग कर प्राप्त कतार पर कतारबद्ध हो सकता है।
एक और प्रतिलिपि हो सकती है - उस बफर से उपयोगकर्ता की प्रतिलिपि; यदि libpcap "शून्य-प्रति" तंत्र का उपयोग कर रहा है, जैसे कि लिनक्स tpacket तंत्र (जो libpcap 1.0 और बाद में डिफ़ॉल्ट रूप से उपयोग करते हैं), दूसरी प्रति नहीं होती है। यह होगा यदि शून्य प्रतिलिपि तंत्र का उपयोग नहीं किया जा रहा है।
हालांकि, अगर आप एक Linux सिस्टम और tpacket तंत्र पर pcap_next()
या pcap_next_ex()
उपयोग कर रहे हैं किया जा रहा है, एक अलग प्रतिलिपि, एक निजी बफर के लिए स्मृति-मैप की गई बफर से; ऐसा नहीं होता है यदि आप pcap_dispatch()
या pcap_loop()
का उपयोग करते हैं।
दूसरे प्रश्न के लिए:
है यही कारण है कि के लिए "snaplen" pcap_open_live()
और pcap_set_snaplen()
लिए तर्क है - यह मदद से आप निर्दिष्ट करते हैं कि "snaplen" से पैकेट डेटा के बाइट्स पर कब्जा कर लिया जाना चाहिए, और है कि इसका मतलब है कि कोई और अधिक उन बाइट्स की तुलना में अधिक नहीं है।
ध्यान दें कि इस लंबाई में लिंक-लेयर हेडर शामिल हैं, और इसमें radiotap हेडर जैसे "मेटाडाटा" हेडर शामिल हो सकते हैं जिन्हें आप 802.11 एडाप्टर पर प्राप्त कर सकते हैं। यह हेडर चर-लंबाई हो सकता है (उदाहरण के लिए, 802.11 पर, 802.11 हेडर चर-लंबाई है, और, यदि आपको रेडियोटाइप हेडर मिल रहे हैं, तो वे चर-लंबाई भी हैं)।
इसके अलावा, आईपीवी 4 और टीसीपी हेडर दोनों के पास विकल्प हो सकते हैं, और आईपीवी 6 पैकेट में एक्सटेंशन हेडर हो सकते हैं, इसलिए आईपी और टीसीपी हेडर की लंबाई भी परिवर्तनीय हो सकती है।
इसका मतलब है कि आपको उपयोग करने के लिए "सबसे खराब केस" स्नैपशॉट लंबाई निर्धारित करना पड़ सकता है; स्पष्ट रूप से कहने का कोई तरीका नहीं है "मुझे टीसीपी/यूडीपी हेडर के पीछे कुछ भी न दें", आप केवल "मुझे एन बाइट्स से अधिक नहीं दे सकते" कह सकते हैं।
- 1. असिंक्रोनस libpcap: पैकेट खोना?
- 2. libpcap आईपी पैकेट Reassembly
- 3. libpcap
- 4. आप UIImageView इंस्टेंस की एक प्रति कैसे बनाते हैं?
- 5. CouchDB डेटाबेस प्रति दस्तावेज़ प्रकार बनाते हैं?
- 6. सभी सूची हमेशा जेनकींस में बनाते हैं?
- 7. सी # डेटटाइम हमेशा नई वस्तु बनाते हैं?
- 8. "हमेशा मौजूदा मॉड्यूल से संबंधित" फ़ाइल पथ बनाते हैं?
- 9. क्या std :: mutex एक बाड़ बनाते हैं?
- 10. वेबसाकेट टीसीपी पैकेट एक साथ चिपकते हैं?
- 11. आप जावा में किसी ऑब्जेक्ट की गहरी प्रति कैसे बनाते हैं?
- 12. यूडीपी पैकेट खोने की संभावना क्या है?
- 13. आप PHP में एक चर की स्पष्ट रूप से एक प्रति कैसे बनाते हैं?
- 14. क्या रैवल हमेशा स्थिर होते हैं?
- 15. आप कैलियर की प्रतिलिपि कैसे बनाते हैं?
- 16. WTForms फ़ील्ड की चर संख्या बनाते हैं
- 17. org.apache.http.Header की सरणी कैसे बनाते हैं?
- 18. प्रति जार की अधिकतम संख्या में फाइलें क्या हैं?
- 19. प्रति सीपीयू धागे की व्यावहारिक सीमा क्या हैं?
- 20. मैं प्रति पीआईडी नेटवर्क पैकेट कैप्चर कैसे कर सकता हूं?
- 21. क्या थ्रेड आईडी प्रति प्रक्रिया या प्रति कंप्यूटर अद्वितीय हैं?
- 22. वेबजीएल बनावट बनाते हैं
- 23. क्या डेटाग्राम हमेशा पूरी तरह से प्राप्त होते हैं?
- 24. क्या विंडोज़ पुराने तकनीक बनाते हैं?
- 25. क्या एचटीएमएल। रेंडरएक्शन एक अलग अनुरोध बनाते हैं?
- 26. सत्र-प्रति-वार्तालाप के क्या फायदे हैं?
- 27. क्या HTTP प्रॉक्सी सर्वर अनुरोध पैकेट संशोधित करते हैं?
- 28. क्या .NET फ़ाइनलाइज़र हमेशा निष्पादित होते हैं?
- 29. UITextField टेक्स्ट बोल्ड बनाते हैं?
- 30. पोस्टग्रेसर उपयोगकर्ता डेटाबेस बनाते हैं