2011-05-03 7 views
5

नया, मैं पोर्ट स्कैनिंग के लिए एक कार्यक्रम पर काम कर रहा हूं, टीसीपी अच्छी तरह से काम करता है, लेकिन मुझे नहीं पता कि यूडीपी बंदरगाहों को स्कैनिंग कैसे करें। मान लें कि मैं जानना चाहता हूं कि इस लैन में किसी अन्य होस्ट पर यूडीपी पोर्ट XXXX खुला है या नहीं। क्या यह कोड काम करेगा? यदि नहीं, तो समस्या क्या है?, यूडीपी पोर्ट स्कैनिंग कैसे प्राप्त करें?

protected String scanUDP(InetAddress IP, int port) 
{ 
    try{ 
     byte [] bytes = new byte[128]; 
     DatagramSocket ds = new DatagramSocket(); 
     DatagramPacket dp = new DatagramPacket(bytes, bytes.length, IP, port); 
     ds.setSoTimeout(1000); 
     ds.send(dp); 
     dp = new DatagramPacket(bytes, bytes.length); 
     ds.receive(dp); 
     ds.close(); 
    } 
    catch(InterruptedIOException e){ 
     return "CLOSED"; 
    } 
    catch(IOException e){ 
     return "CLOSED"; 
    } 
    return "OPEN"; 
} 

अभी भी एक नौसिखिया, अभी भी सीख रहा है। धन्यवाद!

उत्तर

8

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

+0

धन्यवाद, लेकिन मैं उस आईसीएमपी त्रुटि संदेश को कैप्चर कैसे करूं? – ralphxiaoz

+4

डेटाग्राम सॉकेट # भेज एक पोर्टUnreachableException फेंक देगा जो आप पकड़ सकते हैं। – artbristol

+0

धन्यवाद! वास्तव में – ralphxiaoz

3

UDP Port Scanning is possible, लेकिन यह टीसीपी स्कैनिंग से कठिन है।

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

+0

धन्यवाद, मुझे पता है कि यह करेगा लेकिन मुझे पता नहीं है कि जावा में इसे कैसे प्राप्त किया जाए, किसी भी विचार? – ralphxiaoz

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