2012-04-29 16 views
6

मैं एक बहुत ही उच्च यातायात नेटवर्क के लिए निगरानी कार्यक्रम लिख रहा हूं (एचडी वीडियो नेटवर्क के माध्यम से स्ट्रीम किए जाते हैं)। अधिकांश पैकेट बहुत बड़े होते हैं और मैं केवल हेडर (आईपी और यूडीपी/टीसीपी) देखना चाहता हूं। बेशक मैं पूरे डेटा की प्रतिलिपि बनाने के ऊपरी हिस्से से बचना चाहता हूं। क्या libpcap अनिवार्य रूप से मुझे एक पूरे पैकेट की प्रतिलिपि देता है? यदि हां, क्या कोई पुस्तकालय है जो मेरी ज़रूरतों से मेल खाता है?क्या libpcap हमेशा पैकेट की प्रति बनाते हैं?

उत्तर

6

यहां दो सवाल प्रतीत:

  • शीर्षक में से एक है, जो के रूप में अगर यह है कि क्या 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 पैकेट में एक्सटेंशन हेडर हो सकते हैं, इसलिए आईपी और टीसीपी हेडर की लंबाई भी परिवर्तनीय हो सकती है।

इसका मतलब है कि आपको उपयोग करने के लिए "सबसे खराब केस" स्नैपशॉट लंबाई निर्धारित करना पड़ सकता है; स्पष्ट रूप से कहने का कोई तरीका नहीं है "मुझे टीसीपी/यूडीपी हेडर के पीछे कुछ भी न दें", आप केवल "मुझे एन बाइट्स से अधिक नहीं दे सकते" कह सकते हैं।

संबंधित मुद्दे