2014-06-26 5 views
10

मैं अपने परीक्षण प्रोजेक्ट के लिए एक नमूना प्रोग्राम लिखने की कोशिश कर रहा था ताकि सभी डिवाइस (जैसे एंड्रॉइड या आईओएस) या नेटवर्क से जुड़े अन्य कंप्यूटरों को ढूंढ सकें जिनके लिए मेरा कंप्यूटर कनेक्ट है। जब मैं राउटर प्रशासन कंसोल में लॉगिन करता हूं तो मैं सभी कनेक्टेड डिवाइस देख सकता हूं और मैं अपने प्रोग्राम का उपयोग कर एक ही सूची चाहता हूं। मैंने नीचे दिए गए नमूना कोड की कोशिश की जिसमें मैं https://gist.github.com/chrishulbert/895382 पर पोस्ट में आया और इसे दिलचस्प पाया और इसका उपयोग करने की कोशिश की, लेकिन मैं सूची प्राप्त करने में सक्षम नहीं था। क्या मुझे नीचे दिए गए कोड में कुछ याद आ रहा है या यह एक गलत नमूना है जिसका मैं जिक्र कर रहा हूं? इस संबंध में किसी भी मदद की सराहना की जाएगी।मेरे नेटवर्क में डिवाइस/कंप्यूटर डिस्कवरी

function listen(port) { 
var server = dgram.createSocket("udp4"); 
server.on("message", function (msg, rinfo) 
    { 
    console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port); 
}); 
server.bind(port); 

} 

function search() { 
var message = new Buffer(
    "M-SEARCH * HTTP/1.1\r\n" + 
    "HOST:239.255.255.250:1900\r\n" + 
    "MAN:\"ssdp:discover\"\r\n" + 
    "ST:ssdp:all\r\n" + 
    "MX:3\r\n" + 
    "\r\n" 
); 

var client = dgram.createSocket("udp4"); 
client.bind(0,"",function() { 
    console.log(client.address().port); 
    listen(client.address().port); 
    client.send(message, 0, message.length, 1900, "239.255.255.250", 
       function()  { 
     // client.close(); 
    }); 
}); // So that we get a port so we can listen before sending 

} 
search(); 

उत्तर

1

मैं एक यूनिक्स प्रणाली पर nmap का उपयोग एक नेटवर्क पर उपकरणों की सूची प्राप्त करने के लिए। एनएमएपी (npm link | github) के साथ बातचीत के लिए एक नोडजेएस लाइब्रेरी मौजूद है; ताकि आप निम्नलिखित कोड का उपयोग कर आईपी की एक सूची प्राप्त करने के लिए सक्षम होना चाहिए:

require('node-libnmap').nmap('discover', function(err, report){ 
    if (err) throw err 
    console.log(report) 
}); 

और आपको निम्न उत्पादन देखेंगे:

{ 
    adapter: 'eth0', 
    properties: { 
     address: '10.0.2.15', 
     netmask: '255.255.255.0', 
     family: 'IPv4', 
     mac: '52:54:00:12:34:56', 
     internal: false, 
     cidr: '10.0.2.0/24', 
     hosts: 256, 
     range: { start: '10.0.2.1', end: '10.0.2.254' } 
    }, 
    neighbors: [ '10.0.2.2', '10.0.2.3', '10.0.2.15' ] 
} 

आशा में मदद करता है :)

अद्यतन: मुझे थोड़ा अविश्वसनीय पाया गया और node-arp library में एक विकल्प मिला, निम्न स्निपेट /proc/net/arp फ़ाइल से पार्स किए गए आईपी और मैक पते की एक सरणी आउटपुट करता है:

var fs = require('fs'); 

fs.readFile('/proc/net/arp', function(err, data) { 
    if (!!err) return done(err, null); 

    var output = []; 
    var devices = data.toString().split('\n'); 
    devices.splice(0,1); 

    for (i = 0; i < devices.length; i++) { 
     var cols = devices[i].replace(/ [ ]*/g, ' ').split(' '); 

     if ((cols.length > 3) && (cols[0].length !== 0) && (cols[3].length !== 0) && cols[3] !== '00:00:00:00:00:00') { 
      output.push({ 
       ip: cols[0], 
       mac: cols[3] 
      }); 
     } 
    } 

    console.log(output); 
}); 
+0

क्योंकि यह एनएमएपी बाइनरी के साथ इंटरफेस करता है, शायद आपके स्कैन परिणाम --min-rt-timeout, --max-rt-timeout और --initial-rt-timeout विकल्पों से प्रभावित होते हैं जो "निष्क्रिय स्कैन कार्यान्वयन को लागू करते हैं एल्गोरिदम "घटक (ओं)। वे घटक पिछले जांच समय के आधार पर गतिशील रूप से टाइमआउट सेट करेंगे, जो भारी फ़िल्टर किए गए (मेजबान आधारित और परिधि आधारित आईडीएस और आईपीएस सिस्टम) स्कैन करते हैं तो आपको सबसे अधिक अप्रत्याशित परिणाम मिलेंगे। –

0

जो कोड आप उपयोग कर रहे हैं वह SSDP का एक बहुत ही बुनियादी कार्यान्वयन है। (यदि आप एसएसडीपी का उपयोग करना चाहते हैं, तो more complete modules हैं।)

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

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

सरल दृष्टिकोण केवल अपने राउटर के व्यवस्थापक पृष्ठ को स्क्रैप करना है। यदि आप भाग्यशाली हैं, तो आपका राउटर इस जानकारी को एपीआई के माध्यम से उजागर करेगा। अन्यथा, HTML को पार्स करने के लिए अपने राउटर के व्यवस्थापक पैनल से पता असाइनमेंट पृष्ठ और cheerio प्राप्त करने के लिए request का उपयोग करें।

2

@Algi, डिवाइस खोज के लिए आपकी सबसे अच्छी शर्त आईसीएमपी प्रोटोकॉल का उपयोग करना है जिसके लिए उच्च विशेषाधिकारों की आवश्यकता है। यूडीपी प्रोटोकॉल का उपयोग करना (जो ओएसआई परत के 3 & 4 पर संचालित होता है, डिवाइस खोज के लिए उपयुक्त नहीं है जब तक कि खोज के लिए कोई मौजूदा क्लाइंट/सर्वर प्रोटोकॉल लागू नहीं होता है जैसे कि DNS, NetBIOS & ड्रॉपबॉक्स अनुप्रयोगों के उपयोग में)।

कृपया यह मत समझें कि इन उच्च स्तरीय प्रोटोकॉल पर डिवाइस खोज लागू की जा सकती है लेकिन यह मानने के लिए कि नेटवर्क पर डिवाइस मौजूद नहीं है क्योंकि यूडीपी/टीसीपी पोर्ट एन खुला नहीं है।

@Josh3736 के रूप में उल्लेख किया गया है, एसएसडीपी लागू किया जा सकता है लेकिन UPnP के उपयोग के कारण मैं उस लेख में उल्लिखित कारणों के लिए इसके खिलाफ अनुशंसा करता हूं।

@Illizian, मैं node-libnmap पैकेज का लेखक हूं और यह सोच रहा था कि क्या आप कह सकते हैं कि यह "अविश्वसनीय" है। आप किस संस्करण का उपयोग कर रहे थे? नवीनतम संशोधन 0.1.10 पर खड़ा है और यह काफी स्थिर है।

क्योंकि यह एनएमएपी बाइनरी के साथ इंटरफेस करता है, शायद आपके स्कैन परिणाम --min-rt-timeout द्वारा प्रभावित किए जा रहे थे, --मैक्स-आरटी-टाइमआउट & - प्रारंभिक-आरटी-टाइमआउट विकल्प जो "निष्क्रिय स्कैन" कार्यान्वयन एल्गोरिदम "घटक (ओं)।

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

कहा जा रहा है कि, यदि आप उस सीमा से बाहर की समस्याओं का सामना कर रहे हैं तो शायद आपको एक बग मिली है? यदि ऐसा है तो कृपया https://github.com/jas-/node-libnmap/issues पर इसकी रिपोर्ट कर सकते हैं?

पास के मेजबानों को खोजने के लिए एआरपी टेबल का उपयोग करके एक तरफ नोट पर आपके नेटवर्क सेगमेंट पर "सभी" उपलब्ध होस्ट नहीं होंगे। केवल वे लोग जो "चतुर" हैं। Arp तालिका लगातार मेज से मशीनों को धक्का/पॉपिंग कर रही है।

+0

संपादित। धन्यवाद। –

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