2010-11-28 11 views
5

के साथ दो उपकरणों पर एक बार सुनना मैं libpcap के साथ दो उपकरणों पर सुनने की कोशिश कर रहा हूं लेकिन मुझे अभी भी यह पता नहीं चल रहा कि चाल कैसे करें। मैंने डिवाइस को "किसी भी" पर सेट करने का प्रयास किया लेकिन यह काम नहीं कर रहा है। मैं dhcp रिले एजेंट लिखने की कोशिश कर रहा हूं इसलिए मुझे eth0 और eth1 पर सुनने की आवश्यकता है।libpcap

मैंने दो pcap_loops बनाने की कोशिश की, प्रत्येक अलग डिवाइस और हैंडलर के साथ, लेकिन केवल पहला pcap_loop काम करता है, दूसरा को अनदेखा किया जाता है।

क्या ऐसा करने का कोई तरीका है या मुझे libpcap छोड़ना चाहिए और कच्चे सॉकेट के साथ ऐसा करने का प्रयास करना चाहिए?

उत्तर

3

आपको अलग-अलग धागे में अपना pcap_loop() चलाने की आवश्यकता होगी, प्रत्येक इंटरफ़ेस के लिए, हम ऐसा करते हैं, और यह काम करता है।

libpcap के कुछ हिस्सों, हालांकि थ्रेड सुरक्षित नहीं है, कम से कम pcap_setfilter(), तो अपने आसपास अपना लॉकिंग प्रदान करें।

यदि आप धागे का उपयोग नहीं करना चाहते हैं, तो आपको एक ईवेंट लूप स्वयं प्रदान करना होगा, जहां आप चयन/मतदान या इसी तरह के प्रत्येक डिवाइस के फ़ाइल डिस्क्रिप्टर की निगरानी करेंगे। आप pcap_get_selectable_fd() के साथ डिवाइस हैंडल के लिए फ़ाइल डिस्क्रिप्टर प्राप्त कर सकते हैं।

+0

धन्यवाद :) मैं सॉकेट का उपयोग कर समाप्त हुआ :) – Pirozek

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