
तेज़ और विस्तार योग्य 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);