
कई होस्ट्स के लिए कई पथ प्राप्त करें - बिना होस्ट्स को नुकसान पहुँचाए
meg एक उपकरण है जो बहुत सारे URLs लाने के लिए है, लेकिन सर्वरों के प्रति 'दयालु' रहता है। इसका उपयोग कई होस्टों के लिए कई पथ लाने के लिए किया जा सकता है; एक पथ को सभी होस्टों के लिए लाना, फिर अगले पथ पर जाना और दोहराना। आपको बहुत सारे परिणाम जल्दी मिलते हैं, लेकिन किसी भी अलग-अलग होस्ट पर ट्रैफ़िक का बाढ़ नहीं आता।
meg Go में लिखा गया है और इसकी कोई रन-टाइम निर्भरता नहीं है। यदि आपके पास Go 1.9 या बाद का संस्करण स्थापित और कॉन्फ़िगर है, तो आप go install के साथ meg इंस्टॉल कर सकते हैं:
▶ go install github.com/tomnomnom/meg@latest
या एक बाइनरी डाउनलोड करें और इसे अपने $PATH में कहीं रखें (जैसे /usr/bin/ में)।
यदि आपको इस तरह की त्रुटि दिखाई देती है, तो इसका मतलब है कि आपके Go का संस्करण बहुत पुराना है:
# github.com/tomnomnom/rawhttp
/root/go/src/github.com/tomnomnom/rawhttp/request.go:102: u.Hostname undefined (
type *url.URL has no field or method Hostname)
/root/go/src/github.com/tomnomnom/rawhttp/request.go:103: u.Port undefined (type
*url.URL has no field or method Port)
/root/go/src/github.com/tomnomnom/rawhttp/request.go:259: undefined: x509.System
CertPool
आपको या तो अपने Go के संस्करण को अपडेट करना चाहिए, या अपने प्लेटफ़ॉर्म के लिए एक बाइनरी रिलीज़ का उपयोग करना चाहिए।
पथों से भरी एक फ़ाइल को देखते हुए:
/robots.txt
/.well-known/security.txt
/package.json
और होस्टों (एक प्रोटोकॉल के साथ) से भरी एक फ़ाइल:
http://example.com
https://example.com
http://example.net
meg प्रत्येक होस्ट के लिए प्रत्येक पथ का अनुरोध करेगा:
▶ meg --verbose paths hosts
out/example.com/45ed6f717d44385c5e9c539b0ad8dc71771780e0 http://example.com/robots.txt (404 Not Found)
out/example.com/61ac5fbb9d3dd054006ae82630b045ba730d8618 https://example.com/robots.txt (404 Not Found)
out/example.net/1432c16b671043271eab84111242b1fe2a28eb98 http://example.net/robots.txt (404 Not Found)
out/example.net/61deaa4fa10a6f601adb74519a900f1f0eca38b7 http://example.net/.well-known/security.txt (404 Not Found)
out/example.com/20bc94a296f17ce7a4e2daa2946d0dc12128b3f1 http://example.com/.well-known/security.txt (404 Not Found)
...
और आउटपुट को ./out नामक निर्देशिका में सहेजें:
▶ head -n 20 ./out/example.com/45ed6f717d44385c5e9c539b0ad8dc71771780e0
http://example.com/robots.txt
> GET /robots.txt HTTP/1.1
> Host: example.com
< HTTP/1.1 404 Not Found
< Expires: Sat, 06 Jan 2018 01:05:38 GMT
< Server: ECS (lga/13A2)
< Accept-Ranges: bytes
< Cache-Control: max-age=604800
< Content-Type: text/*
< Content-Length: 1270
< Date: Sat, 30 Dec 2017 01:05:38 GMT
< Last-Modified: Sun, 24 Dec 2017 06:53:36 GMT
< X-Cache: 404-HIT
<!doctype html>
<html>
<head>
बिना किसी तर्क के, meg ./paths नामक फ़ाइल से पथ और ./hosts नामक फ़ाइल से होस्ट पढ़ेगा। कोई आउटपुट नहीं होगा:
▶ meg
▶
लेकिन यह ./out/index में एक इंडेक्स फ़ाइल सहेजेगा:
▶ head -n 2 ./out/index
out/example.com/538565d7ab544bc3bec5b2f0296783aaec25e756 http://example.com/package.json (404 Not Found)
out/example.com/20bc94a296f17ce7a4e2daa2946d0dc12128b3f1 http://example.com/.well-known/security.txt (404 Not Found)
आप इंडेक्स फ़ाइल का उपयोग यह पता लगाने के लिए कर सकते हैं कि प्रतिक्रिया कहाँ संग्रहीत है, लेकिन अक्सर grep के साथ जो खोज रहे हैं उसे ढूंढना आसान होता है:
▶ grep -Hnri '< Server:' out/
out/example.com/61ac5fbb9d3dd054006ae82630b045ba730d8618:14:< Server: ECS (lga/13A2)
out/example.com/bd8d9f4c470ffa0e6ec8cfa8ba1c51d62289b6dd:16:< Server: ECS (lga/13A3)
यदि आप केवल एक पथ का अनुरोध करना चाहते हैं, तो आप इसे सीधे एक तर्क के रूप में निर्दिष्ट कर सकते हैं:
▶ meg /admin.php
meg का सहायता आउटपुट वास्तव में सहायक होने का प्रयास करता है:
▶ meg --help
अनेक होस्टों के लिए अनेक पथों का अनुरोध करें
उपयोग:
meg [options] [path|pathsFile] [hostsFile] [outputDir]
विकल्प:
-c, --concurrency <val> समवर्ती स्तर सेट करें (डिफ़ॉल्ट: 20)
-d, --delay <val> एक ही होस्ट के अनुरोधों के बीच मिलीसेकंड में देरी (डिफ़ॉल्ट: 5000)
-H, --header <header> एक कस्टम HTTP हेडर भेजें
-r, --rawhttp अनुरोधों के लिए rawhttp लाइब्रेरी का उपयोग करें (प्रयोगात्मक)
-s, --savestatus <status> केवल विशिष्ट स्थिति कोड वाली प्रतिक्रियाएँ सहेजें
-v, --verbose वर्बोज़ मोड
-X, --method <method> HTTP विधि (डिफ़ॉल्ट: GET)
डिफ़ॉल्ट:
pathsFile: ./paths
hostsFile: ./hosts
outputDir: ./out
पथ फ़ाइल स्वरूप:
/robots.txt
/package.json
/security.txt
होस्ट फ़ाइल स्वरूप:
http://example.com
https://example.edu
https://example.net
उदाहरण:
meg /robots.txt
meg -s 200 -X HEAD
meg -c 30 /
meg hosts.txt paths.txt output
डिफ़ॉल्ट रूप से meg 20 समवर्ती अनुरोध करने का प्रयास करेगा। आप इसे -c या --concurrency विकल्प से बदल सकते हैं:
▶ meg --concurrency 5
समवर्तीता स्तर को होस्टों की संख्या से अधिक रखना बहुत मैत्रीपूर्ण नहीं है - आप एक बार में एक होस्ट को बहुत सारे अनुरोध भेज सकते हैं।
डिफ़ॉल्ट रूप से meg एक ही होस्ट के अनुरोधों के बीच 5000 मिलीसेकंड प्रतीक्षा करेगा। आप इसे -d या --delay विकल्प से ओवरराइड कर सकते हैं:
▶ meg --delay 10000
चेतावनी: देरी कम करने से पहले, सुनिश्चित करें कि आपके पास उन होस्टों पर बड़ी मात्रा में अनुरोध करने की अनुमति है जिन्हें आप लक्षित कर रहे हैं।
आप -H या --header विकल्प के साथ अनुरोधों पर अतिरिक्त हेडर सेट कर सकते हैं:
▶ meg --header "Origin: https://evil.com"
▶ grep -h '^>' out/example.com/*
> GET /.well-known/security.txt HTTP/1.1
> Origin: https://evil.com
> Host: example.com
...
यदि आप ऐसे अनुरोध भेजना चाहते हैं जो मान्य नहीं हैं - उदाहरण के लिए अमान्य URL एन्कोडिंग के साथ - Go HTTP क्लाइंट विफल हो जाएगा:
▶ meg /%%0a0afoo:bar
request failed: parse https://example.org/%%0a0afoo:bar: invalid URL escape "%%0"
आप -r या --rawhttp फ़्लैग का उपयोग करके rawhttp लाइब्रेरी के उपयोग को सक्षम कर सकते हैं, जो अनुरोध पर बहुत कम या कोई सत्यापन नहीं करता है:
▶ meg --verbose --rawhttp /%%0a0afoo:bar
out/example.com/eac3a4978bfb95992e270c311582e6da4568d83d https://example.com/%%0a0afoo:bar (HTTP/1.1 404 Not Found)
rawhttp लाइब्रेरी और इसका उपयोग प्रयोगात्मक है। अन्य चीजों के अलावा यह अभी तक चंक्ड ट्रांसफर एन्कोडिंग का समर्थन नहीं करता है, इसलिए यदि आप इसका उपयोग करते हैं तो आप अपने आउटपुट में चंक लंबाई मिश्रित देख सकते हैं।
यदि आप केवल उन परिणामों को सहेजना चाहते हैं जो एक निश्चित स्थिति कोड लौटाते हैं, तो आप -s या --savestatus विकल्प का उपयोग कर सकते हैं:
▶ meg --savestatus 200 /robots.txt
आप -X या --method विकल्प के साथ निर्दिष्ट कर सकते हैं कि किस HTTP विधि का उपयोग करना है:
▶ meg --method TRACE
▶ grep -nri 'TRACE' out/
out/example.com/61ac5fbb9d3dd054006ae82630b045ba730d8618:3:> TRACE /robots.txt HTTP/1.1
out/example.com/bd8d9f4c470ffa0e6ec8cfa8ba1c51d62289b6dd:3:> TRACE /.well-known/security.txt HTTP/1.1
...