TCP पोर्ट स्कैनर, अतुल्यकालिक रूप से SYN पैकेट भेजता है, 5 मिनट से कम समय में पूरे इंटरनेट को स्कैन करता है।
यह एक इंटरनेट-स्तरीय पोर्ट स्कैनर है। यह एक ही मशीन से 10 मिलियन पैकेट प्रति सेकंड संचारित करते हुए पूरे इंटरनेट को 5 मिनट से भी कम समय में स्कैन कर सकता है।
इसका उपयोग (पैरामीटर, आउटपुट) सबसे प्रसिद्ध पोर्ट स्कैनर nmap के समान है। संदेह होने पर, उन सुविधाओं में से एक को आज़माएं -- ऐसी सुविधाएं जो कई मशीनों के व्यापक स्कैनिंग का समर्थन करती हैं, समर्थित हैं, जबकि एकल मशीनों की गहन स्कैनिंग नहीं की जाती है।
आंतरिक रूप से, यह scanrand, unicornscan, और ZMap जैसे पोर्ट स्कैनर के समान अतुल्यकालिक संचरण का उपयोग करता है। यह अधिक लचीला है, जो मनमानी पोर्ट और पते की श्रेणियों की अनुमति देता है।
नोट: masscan अपने स्वयं के तदर्थ TCP/IP स्टैक का उपयोग करता है। साधारण पोर्ट स्कैन के अलावा कुछ भी स्थानीय TCP/IP स्टैक के साथ विरोध का कारण बन सकता है। इसका मतलब है कि आपको या तो किसी भिन्न IP पते से चलाने के लिए --src-ip विकल्प का उपयोग करना होगा, या --src-port का उपयोग करके यह कॉन्फ़िगर करना होगा कि masscan किन स्रोत पोर्ट का उपयोग करता है, फिर आंतरिक फ़ायरवॉल (जैसे pf या iptables) को भी कॉन्फ़िगर करना होगा ताकि उन पोर्ट को शेष ऑपरेटिंग सिस्टम से फ़ायरवॉल किया जा सके।
यह उपकरण मुफ्त है, लेकिन इसके विकास में धन का योगदान करने पर विचार करें: Bitcoin वॉलेट पता: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
Debian/Ubuntu पर, यह कुछ इस प्रकार है। सी कंपाइलर (जैसे gcc या clang) के अलावा इसकी कोई वास्तविक निर्भरता नहीं है।
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
यह प्रोग्राम को masscan/bin उपनिर्देशिका में रखता है। इसे (लिनक्स पर) स्थापित करने के लिए चलाएं:
make install
स्रोत में बहुत सारी छोटी फ़ाइलें होती हैं, इसलिए मल्टी-थ्रेडेड बिल्ड का उपयोग करके निर्माण बहुत तेज हो जाता है। इसके लिए Raspberry Pi पर 2 गीगाबाइट से अधिक की आवश्यकता होती है (और टूट जाता है), इसलिए आप सभी संभावित थ्रेड के बजाय एक छोटी संख्या, जैसे -j4 का उपयोग कर सकते हैं।
make -j
जबकि लिनक्स प्राथमिक लक्ष्य प्लेटफॉर्म है, कोड कई अन्य सिस्टम (विंडोज, मैकओएस, आदि) पर अच्छी तरह से चलता है। यहां कुछ अतिरिक्त बिल्ड जानकारी दी गई है:
make टाइप करेंmake टाइप करेंgmake टाइप करेंcc src/*.c -o bin/masscanmacOS पर, x86 बाइनरी ARM एमुलेशन के तहत उतनी ही तेजी से काम करते प्रतीत होते हैं।
उपयोग nmap के समान है। कुछ पोर्ट के लिए नेटवर्क सेगमेंट को स्कैन करने के लिए:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
यह करेगा:
10.x.x.x सबनेट, और 2603:3001:2d00:da00::x सबनेट को स्कैन करें<stdout> पर प्रिंट करें जिसे एक फ़ाइल में रीडायरेक्ट किया जा सकता हैविकल्पों की पूरी सूची देखने के लिए, --echo सुविधा का उपयोग करें। यह वर्तमान कॉन्फ़िगरेशन को डंप करता है और बाहर निकलता है। इस आउटपुट को प्रोग्राम में वापस इनपुट के रूप में उपयोग किया जा सकता है:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
मास्कैन केवल यह पता लगाने से अधिक कर सकता है कि पोर्ट खुले हैं या नहीं। यह सरल "बैनर" जानकारी प्राप्त करने के लिए TCP कनेक्शन और उस पोर्ट पर एप्लिकेशन के साथ इंटरैक्शन भी पूरा कर सकता है।
Masscan निम्नलिखित प्रोटोकॉल पर बैनर जाँच का समर्थन करता है:
इसके साथ समस्या यह है कि masscan में उस सिस्टम से अलग अपना स्वयं का TCP/IP स्टैक होता है जिस पर आप इसे चलाते हैं। जब स्थानीय सिस्टम को जांचे गए लक्ष्य से SYN-ACK प्राप्त होता है, तो यह RST पैकेट के साथ प्रतिक्रिया करता है जो masscan द्वारा बैनर प्राप्त करने से पहले कनेक्शन को समाप्त कर देता है।
इसे रोकने का सबसे आसान तरीका masscan को एक अलग IP पता निर्दिष्ट करना है। यह निम्नलिखित उदाहरणों में से एक जैसा दिखेगा:
# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
# masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d
आपके द्वारा चुना गया पता स्थानीय सबनेट पर होना चाहिए और किसी अन्य सिस्टम द्वारा उपयोग नहीं किया जा रहा होना चाहिए। Masscan आपको चेतावनी देगा कि आपने गलती की है, लेकिन हो सकता है कि आपने कुछ मिनटों के लिए दूसरी मशीन के संचार को गड़बड़ कर दिया हो, इसलिए सावधान रहें।
कुछ मामलों में, जैसे वाई-फाई, यह संभव नहीं है। ऐसे मामलों में, आप masscan द्वारा उपयोग किए जाने वाले पोर्ट को फ़ायरवॉल कर सकते हैं। यह स्थानीय TCP/IP स्टैक को पैकेट देखने से रोकता है, लेकिन masscan इसे अभी भी देखता है क्योंकि यह स्थानीय स्टैक को बायपास करता है। लिनक्स के लिए, यह इस तरह दिखेगा:
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
आप शायद ऐसे पोर्ट चुनना चाहेंगे जो लिनक्स द्वारा स्रोत-पोर्ट के लिए चुने जा सकने वाले पोर्ट से टकरा न सकें। आप लिनक्स द्वारा उपयोग की जाने वाली सीमा को फ़ाइल में देखकर और उस सीमा को पुन: कॉन्फ़िगर कर सकते हैं:
/proc/sys/net/ipv4/ip_local_port_range
Kali Linux के नवीनतम संस्करण (अगस्त 2018) पर, वह सीमा 32768 से 60999 है, इसलिए आपको 32768 से नीचे या 61000 और उससे ऊपर के पोर्ट चुनने चाहिए।
iptables नियम सेट करना केवल अगले रीबूट तक रहता है। आपको अपने डिस्ट्रो के अनुसार कॉन्फ़िगरेशन को सहेजने का तरीका देखना होगा, जैसे iptables-save और/या iptables-persistent का उपयोग करना।
Mac OS X और BSD पर, समान चरण हैं। बचने के लिए रेंज का पता लगाने के लिए, निम्नलिखित जैसे कमांड का उपयोग करें:
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
FreeBSD और पुराने MacOS पर, ipfw कमांड का उपयोग करें:
# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000
नए MacOS और OpenBSD पर, pf पैकेट-फ़िल्टर उपयोगिता का उपयोग करें। फ़ाइल /etc/pf.conf को संपादित करके निम्नलिखित जैसी एक पंक्ति जोड़ें:
block in proto tcp from any to any port 40000:40015
फिर फ़ायरवॉल को सक्षम करने के लिए, कमांड चलाएँ:
# pfctl -E
यदि फ़ायरवॉल पहले से चल रहा है, तो या तो रीबूट करें या निम्नलिखित कमांड के साथ नियमों को पुनः लोड करें:
# pfctl -f /etc/pf.conf
Windows RST पैकेट के साथ प्रतिक्रिया नहीं करता है, इसलिए इनमें से कोई भी तकनीक आवश्यक नहीं है। हालांकि, masscan अभी भी अपने स्वयं के IP पते का उपयोग करके सबसे अच्छा काम करने के लिए डिज़ाइन किया गया है, इसलिए जब संभव हो तो आपको इस तरह से चलाना चाहिए, भले ही यह सख्ती से आवश्यक न हो।
अन्य जांचों के लिए भी यही आवश्यक है, जैसे --heartbleed जांच, जो बैनर जांच का एक रूप है।
जबकि छोटे, आंतरिक नेटवर्क के लिए उपयोगी, प्रोग्राम वास्तव में पूरे इंटरनेट को ध्यान में रखकर डिज़ाइन किया गया है। यह कुछ इस तरह दिख सकता है:
# masscan 0.0.0.0/0 -p0-65535
पूरे इंटरनेट को स्कैन करना बुरा है। एक बात के लिए, इंटरनेट के कुछ हिस्से स्कैन किए जाने पर बुरी प्रतिक्रिया देते हैं। दूसरी बात, कुछ साइटें स्कैन को ट्रैक करती हैं और आपको प्रतिबंध सूची में जोड़ देती हैं, जो आपको इंटरनेट के उपयोगी हिस्सों से फ़ायरवॉल कर देंगी। इसलिए, आप बहुत सी श्रेणियों को बाहर करना चाहते हैं। श्रेणियों को ब्लैकलिस्ट या बहिष्कृत करने के लिए, आप निम्नलिखित सिंटैक्स का उपयोग करना चाहते हैं:
# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
यह केवल परिणामों को कमांड-लाइन पर प्रिंट करता है। आप शायद उन्हें इसके बजाय एक फ़ाइल में सहेजना चाहते हैं। इसलिए, आप कुछ इस तरह चाहते हैं:
# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml
यह परिणामों को एक XML फ़ाइल में सहेजता है, जिससे आप आसानी से परिणामों को डेटाबेस या किसी चीज़ में डंप कर सकते हैं।
लेकिन, यह केवल 100 पैकेट/सेकंड की डिफ़ॉल्ट दर पर जाता है, जो इंटरनेट को स्कैन करने में हमेशा लगेगा। आपको इसे इस प्रकार गति देनी होगी:
# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000