
तेज़ और विस्तार योग्य network scanning library जिसमें multithreading, ping probing, और scan fetchers शामिल हैं।
फोररनर लाइब्रेरी एक तेज़, हल्की और विस्तार योग्य नेटवर्किंग लाइब्रेरी है जो मजबूत नेटवर्क-केंद्रित अनुप्रयोगों जैसे: IP स्कैनर, पोर्ट नॉकर, क्लाइंट, सर्वर आदि के विकास में सहायता के लिए बनाई गई है। अपनी वर्तमान स्थिति में, फोररनर लाइब्रेरी समकालिक (synchronously) और असमकालिक (asynchronously) दोनों तरीकों से IP पतों को स्कैन और पोर्ट नॉक करने में सक्षम है, ताकि उस एंडपॉइंट पर स्थित डिवाइस के बारे में जानकारी प्राप्त की जा सके जैसे: IP ऑनलाइन है या नहीं, भौतिक MAC पता, आदि। लाइब्रेरी पूरी तरह से ऑब्जेक्ट ओरिएंटेड और इवेंट-आधारित है, जिसका अर्थ है कि स्कैन डेटा विशेष रूप से तैयार किए गए "स्कैन" ऑब्जेक्ट्स में समाहित होता है जो परिणामों से लेकर अपवादों तक सभी डेटा को संभालने के लिए डिज़ाइन किए गए हैं।
| विधि | विवरण | उपयोग |
|---|---|---|
| Scan | एक एकल IP की जानकारी स्कैन करें | Scan("192.168.1.1"); |
| ScanRange | IP की एक श्रेणी स्कैन करें | ScanRange("192.168.1.1", "192.168.1.255") |
| ScanList | IP की सूची स्कैन करें | ScanList("192.168.1.1, 192.168.1.2, 192.168.1.3") |
| PortKnock | एक एकल IP के हर पोर्ट को पिंग करें | PortKnock("192.168.1.1"); |
| PortKnockRange | IP की श्रेणी के हर पोर्ट को पिंग करें | PortKnockRange("192.168.1.1", "192.168.1.255"); |
| PortKnockList | IP सूची का उपयोग करके हर पोर्ट को पिंग करें | PortKnockList("192.198.1.1, 192.168.1.2, 192.168.1.3"); |
| IsHostAlive | एक होस्ट को X मिलीसेकंड के लिए N बार पिंग करें | IsHostAlive("192.168.1.1", 5, 1000); |
| GetAveragePingResponse | होस्ट का औसत पिंग प्रतिक्रिया प्राप्त करें | GetAveragePingResponse("192.168.1.1", 5, 1000); |
| IsPortOpen | TCP & UDP के माध्यम से व्यक्तिगत पोर्ट पिंग करें | IsPortOpen("192.168.1.1", 45000, new TimeSpan(1000), false); |
इस डिजिटल युग में नेटवर्क को स्कैन करना एक सामान्य कार्य है, और इसलिए मैंने इसे किसी भी भविष्य के प्रोग्रामर के लिए जितना संभव हो सके उतना सरल बनाने की स्वतंत्रता ली है, जो शायद ऐसा करना चाहे। फोररनर लाइब्रेरी पूरी तरह से ऑब्जेक्ट ओरिएंटेड है, इस प्रकार यह प्लग एंड प्ले स्थितियों के लिए आदर्श है; IP स्कैनिंग के लिए ऑब्जेक्ट को IPScanObject कहा जाता है और इसमें वास्तव में काफी कुछ गुण (properties) होते हैं:
इस ऑब्जेक्ट को ध्यान में रखते हुए, आइए एक नया ऑब्जेक्ट बनाने और इसका उपयोग करके स्कैन करने का प्रयास करें। ऐसा करने के कई तरीके हैं, हालांकि, शुरू करने का सबसे सरल तरीका पहले एक नया Scanner ऑब्जेक्ट बनाना है ताकि हम अपने स्कैनिंग विधियों तक पहुँच सकें। इसके बाद, एक IPScanObject बनाएँ और इसे उस IP के साथ Scan विधि पर सेट करें जिसे आप गणना करना चाहते हैं; उदाहरण के लिए:
using System;
using Forerunner; // अपनी लाइब्रेरी आयात करना याद रखें।
namespace Example
{
class Program
{
static void Main(string[] args)
{
// हम जिस IP को स्कैन करना चाहते हैं।
string ip = "192.168.1.1";
// एक नया scanner ऑब्जेक्ट बनाएँ।
Scanner s = new Scanner();
// एक नया scan ऑब्जेक्ट बनाएँ और स्कैन करें।
IPScanObject result = s.Scan(ip);
// आउटपुट दें कि स्कैन पूरा हो गया है।
if (result.Errors != null)
Console.WriteLine("[x] स्कैन के दौरान एक त्रुटि हुई।");
else
Console.WriteLine("[+] " + ip + " सफलतापूर्वक स्कैन हो गया है!")
// उपयोगकर्ता को किसी भी समय बाहर निकलने की अनुमति दें।
Console.Read();
}
}
}
दूसरा तरीका, जो मेरा पसंदीदा तरीका है, एक Scanner ऑब्जेक्ट बनाना और ScanAsyncProgressChanged या ScanAsyncComplete जैसे इवेंट हैंडलर्स की सदस्यता लेना है, ताकि मुझे अपने async विधियों पर पूर्ण नियंत्रण मिल सके; मैं नियंत्रित कर सकता हूँ कि उनकी प्रगति स्थितियाँ मेरे एप्लिकेशन को कैसे प्रभावित करती हैं, इत्यादि; उदाहरण के लिए:
using System;
using System.Threading.Tasks;
using Forerunner; // अपनी लाइब्रेरी आयात करना याद रखें।
namespace Example
{
class Program
{
static void Main(string[] args)
{
// हम जिस IP को स्कैन करना चाहते हैं।
string ip = "192.168.1.1";
// अपना scanner ऑब्जेक्ट सेटअप करें।
Scanner s = new Scanner();
s.ScanAsyncProgressChanged += new ScanAsyncProgressChangedHandler(ScanAsyncProgressChanged);
s.ScanAsyncComplete += new ScanAsyncCompleteHandler(ScanAsyncComplete);
// अपने ip के साथ एक नया स्कैन कार्य शुरू करें।
TaskFactory task = new TaskFactory();
task.StartNew(() => s.ScanAsync(ip));
// उपयोगकर्ता को किसी भी समय बाहर निकलने की अनुमति दें।
Console.Read();
}
static void ScanAsyncProgressChanged(object sender, ScanAsyncProgressChangedEventArgs e)
{
// यहाँ e.Progress के साथ कुछ करें, या आप इस इवेंट को सब्सक्राइब नहीं छोड़ सकते
// ताकि आपको कुछ नहीं करना पड़े।
}
static void ScanAsyncComplete(object sender, ScanAsyncCompleteEventArgs e)
{
// IPScanObject उर्फ e.Result के साथ कुछ करें।
if (e.Result.Errors != null)
Console.WriteLine("[x] स्कैन के दौरान एक त्रुटि हुई।");
else
Console.WriteLine("[+] " + e.Result.IP + " सफलतापूर्वक स्कैन हो गया है!")
}
}
}
मुझे पता है आप क्या सोच रहे हैं। पोर्ट नॉकिंग? हाँ, और नहीं। यह शब्द पारंपरिक अर्थों में पोर्ट नॉकिंग का मतलब नहीं है जहाँ पूर्वनिर्धारित पोर्ट के सेट के माध्यम से कनेक्ट किया जाता है, बल्कि यह सिर्फ जाँच करना है कि क्या कोई पोर्ट वास्तव में खुला है। यह सचमुच हर अर्थ में एक पोर्ट पर "दस्तक" देना है, प्रत्येक पोर्ट से जुड़ने और डेटा भेजने का प्रयास करके। ठीक IP स्कैनिंग की तरह, पोर्ट नॉकिंग एक कस्टम ऑब्जेक्ट का उपयोग करता है जिसे "PortKnockScanObject" या संक्षेप में PKScanObject कहा जाता है। PKScanObject में वास्तव में PKServiceObjects की एक सूची होती है जो बदले में हमारे पोर्ट डेटा को रखती है; सेवा ऑब्जेक्ट में निम्नलिखित गुण (properties) होते हैं:
पोर्ट नॉकिंग IP स्कैनिंग के समान तरीके से काम करता है। पहले, एक Scanner ऑब्जेक्ट बनाएँ। इसके बाद, एक नया PKScanObject बनाएँ और इसे अपनी पसंद के IP के साथ PortKnock विधि पर सेट करें, फिर अपने परिणाम प्रदर्शित करें; उदाहरण के लिए:
using System;
using Forerunner; // अपनी लाइब्रेरी आयात करना याद रखें।
namespace Example
{
class Program
{
static void Main(string[] args)
{
// हम जिस IP को स्कैन करना चाहते हैं।
string ip = "192.168.1.1";
// एक नया scanner ऑब्जेक्ट बनाएँ।
Scanner s = new Scanner();
// एक नया scan ऑब्जेक्ट बनाएँ और स्कैन करें।
PKScanObject result = s.PortKnock(ip);
// आउटपुट दें कि स्कैन पूरा हो गया है।
if (result.Errors != null)
Console.WriteLine("[x] स्कैन के दौरान एक त्रुटि हुई।");
else
Console.WriteLine("[+] " + ip + " सफलतापूर्वक स्कैन हो गया है!")
// अपने परिणाम प्रदर्शित करें।
foreach (PKServiceObject port in result.Services)
{
Console.WriteLine("[+] IP: " + port.IP + " | " +
"Port: " + port.Port.ToString() + " | " +
"Protocol: " + port.Protocol.ToString() + " | " +
"Status: " + port.Status.ToString());
}
// उपयोगकर्ता को किसी भी समय बाहर निकलने की अनुमति दें।
Console.Read();
}
}
}
अंत में, मैं आपको पोर्ट नॉकिंग का एक सरल उदाहरण दिखाऊंगा जो असमकालिक (asynchronously) तरीके से काम करता है। यह मूल रूप से पोर्ट नॉकिंग के समकालिक संस्करण के समान है, सिवाय इस तथ्य के कि आप अपने लाभ के लिए इवेंट का उपयोग कर सकते हैं। आप UIs के क्रैश होने या सिस्टम के लॉक होने की चिंता किए बिना प्रगति अपडेट प्राप्त कर सकते हैं; उदाहरण के लिए:
using System;
using System.Threading.Tasks;
using Forerunner; // अपनी लाइब्रेरी आयात करना याद रखें।
namespace Example
{
class Program
{
static void Main(string[] args)
{
// हम जिस IP को स्कैन करना चाहते हैं।
string ip = "192.168.1.1";
// अपना scanner ऑब्जेक्ट सेटअप करें।
Scanner s = new Scanner();
s.PortKnockAsyncProgressChanged += new PortKnockAsyncProgressChangedHandler(PortKnockAsyncProgressChanged);
s.PortKnockAsyncComplete += new PortKnockAsyncCompleteHandler(PortKnockAsyncComplete);
// अपने ip के साथ एक नया स्कैन कार्य शुरू करें।
TaskFactory task = new TaskFactory();
task.StartNew(() => s.PortKnockAsync(ip));
// उपयोगकर्ता को किसी भी समय बाहर निकलने की अनुमति दें।
Console.Read();
}
static void PortKnockAsyncProgressChanged(object sender, PortKnockAsyncProgressChangedEventArgs e)
{
// अपनी प्रगति प्रदर्शित करें ताकि हम ETA जान सकें।
if (e.Progress == 99)
{
Console.Write(e.Progress.ToString() + "%...");
Console.WriteLine("100%!");
}
else
Console.Write(e.Progress.ToString() + "%...");
}
static void PortKnockAsyncComplete(object sender, PortKnockAsyncCompleteEventArgs e)
{
// उपयोगकर्ता को बताएं कि पोर्ट नॉक पूरा हो गया है।
Console.WriteLine("[+] Port Knock Complete!");
// जांचें कि क्या हमने कोई त्रुटि हल की।
if (e.Result == null)
Console.WriteLine("[X] पोर्ट नॉक से कोई डेटा वापस नहीं आया!");
else
{
// जांचें कि क्या हमारे पास कोई पोर्ट दर्ज है।
if (e.Result.Services.Count == 0)
Console.WriteLine("[!] नॉक के दौरान कोई पोर्ट खुला नहीं था।");
else
{
// अपने पोर्ट और उनके विवरण प्रदर्शित करें।
foreach (PKServiceObject port in e.Result.Services)
{
Console.WriteLine("[+] IP: " + port.IP + " | " +
"Port: " + port.Port.ToString() + " | " +
"Protocol: " + port.Protocol.ToString() + " | " +
"Status: " + port.Status.ToString());
}
}
}
}
}
}
आइकन: monkik
https://www.flaticon.com/authors/monkik
कॉपीराइट © ∞ Jason Drawdy
सर्वाधिकार सुरक्षित।
MIT लाइसेंस (MIT)
इसके द्वारा, इस सॉफ्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ्टवेयर") की एक प्रति प्राप्त करने वाले किसी भी व्यक्ति को बिना किसी प्रतिबंध के सॉफ्टवेयर में सौदा करने की अनुमति दी जाती है, जिसमें बिना किसी सीमा के सॉफ्टवेयर का उपयोग, प्रतिलिपि, संशोधन, विलय, प्रकाशन, वितरण, उप-लाइसेंस और/या बेचने के अधिकार शामिल हैं, और सॉफ्टवेयर प्रदान किए जाने वाले व्यक्तियों को ऐसा करने की अनुमति देने के लिए, निम्नलिखित शर्तों के अधीन:
उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सॉफ्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल किया जाएगा।
सॉफ्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, व्यक्त या निहित, जिसमें बिना सीमा के व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन की वारंटी शामिल नहीं है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध, अपकृत्य या किसी अन्य कार्रवाई में उत्पन्न हुआ हो, सॉफ्टवेयर से या सॉफ्टवेयर के उपयोग या अन्य सौदों से संबंधित हो।
इस नोटिस में निहित के अलावा, उपरोक्त कॉपीराइट धारक का नाम पूर्व लिखित प्राधिकरण के बिना इस सॉफ्टवेयर की बिक्री, उपयोग या अन्य सौदों को बढ़ावा देने के लिए विज्ञापन या अन्यथा उपयोग नहीं किया जाएगा।