UDP पोर्ट कनेक्टिविटी का परीक्षण


37

मैं यह जांचने की कोशिश कर रहा हूं कि क्या मुझे यूडीपी के माध्यम से रिमोट सर्वर पर किसी विशेष पोर्ट (जिसमें मेरी पहुंच है) तक पहुंच सकता है।

दोनों सर्वर इंटरनेट का सामना कर रहे हैं। मैं एक निश्चित पोर्ट सुनने के लिए netcat का उपयोग कर रहा हूं।

मैं उस पोर्ट को देखने के लिए जाँचता हूँ कि यह खुला है या नहीं, लेकिन यह दिखाई नहीं देता है।

Iptables बंद कर दिया गया है।

कोई सुझाव क्यों यह हो सकता है? मैं अंततः एक वीपीएन सुरंग स्थापित करने जा रहा हूं, लेकिन क्योंकि मैं सुरंगों के लिए बहुत नया हूं, मैं यह सुनिश्चित करना चाहता हूं कि आगे बढ़ने से पहले मेरे पास पोर्ट यूडीपी 1194 पर कनेक्टिविटी हो।


मैंने "परीक्षण यूडीपी पोर्ट कनेक्टिविटी" प्रश्न का उत्तर दिया है। लेकिन मैं और अधिक विशिष्ट पर ध्यान केंद्रित करने का सुझाव देता हूं "सुनिश्चित करें कि ओपनवीपीएन मेरे यूडीपी पैकेट प्राप्त करता है" भाग - जिसे ओपनवीपीएन लॉग को देखकर आसानी से प्राप्त किया जा सकता है।
ल्यूक404 एबीएस

जवाबों:


46

"ओपन" यूडीपी पोर्ट जैसी कोई चीज नहीं है, कम से कम इस मायने में नहीं कि ज्यादातर लोगों को सोचने के लिए उपयोग किया जाता है (जो "ओके, मैंने आपका कनेक्शन स्वीकार कर लिया है" जैसे कुछ का जवाब दे रहा है)। यूडीपी सत्र-कम है, इसलिए "एक पोर्ट" (पढ़ें: ऑपरेटिंग सिस्टम आईपी स्टैक में यूडीपी प्रोटोकॉल) अपने दम पर कभी भी "सफलता" का जवाब नहीं देगा।

यूडीपी बंदरगाहों में केवल दो राज्य हैं: सुनना या नहीं। यह आमतौर पर "एक प्रक्रिया द्वारा उस पर खुला सॉकेट होने" या "किसी भी सॉकेट के खुले न होने" का अनुवाद करता है। बाद के मामले का पता लगाना आसान होना चाहिए क्योंकि सिस्टम को कोड = 3 (पोर्ट अनुपलब्ध) के साथ ICMP गंतव्य अनुपलब्ध पैकेट के साथ प्रतिक्रिया करनी चाहिए । दुर्भाग्य से कई फ़ायरवॉल उन पैकेटों को गिरा सकते हैं, यदि आपको कुछ भी वापस नहीं मिलता है तो आप यह सुनिश्चित नहीं कर सकते हैं कि पोर्ट इस राज्य में है या नहीं। और आइए यह न भूलें कि ICMP सत्र-कम भी है और यह पुन: प्रसारण नहीं करता है: पोर्ट अप्राप्य पैकेट बहुत अच्छी तरह से नेट पर कहीं खो सकता है।

"सुनने" स्थिति में एक यूडीपी पोर्ट बिल्कुल भी जवाब नहीं दे सकता है (इस पर सुनने की प्रक्रिया सिर्फ पैकेट प्राप्त करती है और कुछ भी प्रेषित नहीं करती है) या यह कुछ वापस भेज सकता है (यदि प्रक्रिया रिसेप्शन पर कार्य करती है और यदि यह इसके द्वारा कार्य करती है मूल प्रेषक आईपी: पोर्ट) के लिए यूडीपी के माध्यम से जवाब देना। तो फिर, आप कभी भी यह सुनिश्चित करने के लिए नहीं जानते हैं कि अगर आपको कुछ वापस नहीं मिला तो क्या स्थिति होगी।

आप कहते हैं कि आपके पास प्राप्त होस्ट का नियंत्रण हो सकता है: जो आपको UDP पोर्ट की पुन: जांच करने के लिए अपने प्रोटोकॉल का निर्माण करने में सक्षम बनाता है: बस प्राप्त होस्ट पर एक प्रक्रिया डालें जो दिए गए UDP पोर्ट पर सुनेंगे और वापस जवाब देंगे (या आपको भेजेंगे) एक ईमेल, या unlink()मेजबान फ़ाइल सिस्टम पर सब कुछ बाहर है और कुछ भी ... जो कुछ भी आपके ध्यान को ट्रिगर करेगा वह करेगा)।


सोचिये मैं इसे अब समझ रहा हूँ। तो श्रवण पोर्ट के साथ सर्वर पर एक netstat रिमोट होस्ट को कभी नहीं दिखाएगा ... केवल एक tcpdump को दूरस्थ अनुरोध दिखाना चाहिए?
लॉक करें

Netstat और tcpdump दोनों में डेटा को आप पर डंप करने की क्षमता होती है, जो बाद में अधिक मानव-पठनीय रूप में होता है। विवरण के लिए उनके मैन पेज देखें।
ल्यूक404 एबीएस

56

यूडीपी पोर्ट जवाब दे रहा है या नहीं, इसका परीक्षण करने के लिए netcat

मैन पेज से एक उदाहरण :

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

बेशक, अगर कोई फ़ायरवॉल DROPइंगेज्ड है, जो कि आम तौर पर इंटरनेट के सामने आने वाले गेटवे से निपटने के दौरान होती है, तो आपको ICMP रिस्पॉन्स नहीं मिलेगा।


1
इस प्रतिक्रिया ने मुझे एक गलत-सकारात्मक संकेत दिया, जहां, इसके विपरीत, साशा का उत्तर वह प्रदर्शित करता है जो मैं उम्मीद करता हूं।
टेक्सस-ब्रोंसियस

@ टेक्सस-ब्रोंयियस यदि आपके पास दूसरे सर्वर तक पहुंच है, तो साशा का रास्ता करना बेहतर होगा
motobói

27
  1. क्लाइंट ans सर्वर पर दोनों nc स्थापित करें: yum install nc(सेंटोस के लिए)
  2. सर्वर पर UDP पोर्ट सुनो: nc -ul 6111
  3. ग्राहक पर nc -u <server> 6111
  4. क्लाइंट और हिट एंटर पर कुछ भी लिखें - आपको सर्वर पर यह टेक्स्ट देखना चाहिए

नोट: जब आप nc -ulसर्वर पर कमांड चलाते हैं , तो यह केवल पहले आने वाले कनेक्शन के लिए कनेक्ट होगा । जैसा कि मुझे पता चला है, आप सर्वरों के बीच बिना रुके और फिर से शुरू हुए इसे स्विच कर सकते हैं nc -ul। वास्तव में, यदि आप क्लाइंट को बंद कर देते हैं ( nc -u ...), तो आप क्लाइंट को पहले सर्वर श्रोता को पुनः आरंभ किए बिना पुनः आरंभ नहीं कर सकते।


1
मुझे यह चतुर उत्तर पसंद है, क्योंकि यह मेरी अपनी समझ (और गलतफहमी) को खिलाता है कि कैसे यूडीपी "भेजें और भूल जाएं" और सभी पुष्टि केवल उचित कॉन्फ़िगरेशन से प्राप्त की जा सकती है। बहुत सारे कारक। यह प्रतिक्रिया वास्तव में सरल, निश्चित कॉल और प्रतिक्रिया देती है जो या तो काम करती है या काम नहीं करती है, कॉन्फ़िगर, कुल्ला और दोहराएं।
टेक्सस-ब्रोंसियस

10

नैंप के साथ खुले यूडीपी पोर्ट का परीक्षण खतरों से भरा है - खुलेपन को इंगित करने के लिए कोई तीन-तरफ़ा हैंडशेक नहीं है। जब तक श्रवण प्रक्रिया जो कुछ भी namp भेजता है, उसका जवाब देती है, तो nmap के लिए एक खुले पोर्ट के बीच अंतर करने का कोई रास्ता नहीं है जो प्रतिक्रिया नहीं कर रहा है और फ़िल्टर किए गए पोर्ट।

बहुत आसान है बस एक छोर पर netcat के साथ सुनें और पैकेट भेजने के लिए दूसरे छोर पर netcat का उपयोग करें, और देखें कि वे दूसरे छोर पर पहुंचे। क्या यह दोनों ही तरीके निश्चित हैं। आप tcpdumpपैकेट को देखने के लिए भी देख सकते हैं कि उन्हें कहाँ जाना है।


मैं देख रहा हूँ .. तो कैसे nmap एक खुला बंदरगाह वास्तव में जानता है? क्या यह उस पोर्ट पर डेटा भेजता है और यदि उसे कोई प्रतिक्रिया मिलती है, तो उसे ओपन माना जाता है? मैं tcpdump और netcat के संयोजन का उपयोग करूंगा। आपके सुविचारित उत्तर के लिए धन्यवाद।
लॉक करें

9

मुझे एक समान समस्या हो रही थी और यहाँ netcat का उपयोग करके एक अच्छा समाधान मिला: http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_is_open:_simple_UDP_serP_and_client

nc -vzu <host> <port>

मैं पुष्टि करने में सक्षम था कि मेरा यूडीपी पोर्ट खुला था और फिर अपने वास्तविक कोड के परीक्षण के लिए आगे बढ़ सकता था।



1

आप इसे netcat(nc) या iperf, यह मानकर कर सकते हैं कि आपके पास नेटवर्क के बाहर परीक्षण करने के लिए एक और मशीन है। मेरी पसंद nmapआपके पर्यावरण के बाहर एक सिस्टम से UDP स्कैन होगी । आपकी नैम्प कमांड लाइन क्या थी? क्या मिक्स में कोई हार्डवेयर फायरवॉल या अन्य डिवाइस हैं?


1

मेरा सीधा-साधा दृष्टिकोण है। यदि UDP सर्वर अपेक्षित डेटा वापस नहीं करता है, तो मैं यह मानकर चलना बंद कर देता हूं कि यह नीचे चला गया है:

LINE: while(1)
{
    my $line;
    my $flags;

    local $SIG{ALRM} = sub {die "exceeded timeout for recv"};
    alarm 5;
    eval {
        $socket->recv($line,2024,$flags);
    };

    unless($line =~ /\{.*\}/){
        if($verbose){
            print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n";
        }

        last LINE;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.