Netcat बनाने के लिए मौजूदा HTTP प्रॉक्सी का उपयोग कैसे करें


11

मैं अपने वेब सर्वर को सीधे हिट करके एक वेब पेज को ठीक प्रकार से एक्सेस कर सकता हूं:

$ echo "GET /sample" | nc web-server 80
This is contents of /sample...
$

अब, मैं स्क्विट HTTP प्रॉक्सी (पोर्ट 3128 पर सुनना) के माध्यम से जाने के लिए netcat चाहूंगा, बहुत कुछ जैसे मैं अपने फ़ायरफ़ॉक्स ब्राउज़र को अपनी प्रॉक्सी वरीयताओं के माध्यम से कॉन्फ़िगर कर सकता हूं और यह एक HTTP प्रॉक्सी के माध्यम से जा सकता है।

मैंने निम्नलिखित कोशिश की, लेकिन यह काम नहीं किया:

$ echo "GET /sample" | nc -x squid-proxy:3128 web-server 80
    <Seemed to be blocked FOREVER on input, so I killed it.>
<Ctrl-C>
$

नोट: मैं netcat के RHEL 5.3 संस्करण का उपयोग कर रहा हूं जिसमें निम्नलिखित विकल्प हैं:

$ nc --help
nc: invalid option -- -
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
  [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
  [-x proxy_address[:port]] [hostname] [port[s]]

के मैन पेज से अंश nc:

 EXAMPLES
    <snip>
 Connect to port 42 of host.example.com via an HTTP proxy at 10.2.3.4, port 8080. 
 This example could also be used by ssh(1); see the ProxyCommand directive in
 ssh_config(5) for more information.
       $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42

अब, क्योंकि मेरा कोई ssh / SSL usecase नहीं है, मुझे यकीन नहीं है कि कैसे -x/ -Xविकल्प का उपयोग करना है , या यहां तक ​​कि मुझे उनका उपयोग करना चाहिए या नहीं!

यदि उपरोक्त लक्ष्य को प्राप्त करने का एक से अधिक तरीका है (जैसे, HTTP प्रॉक्सी के माध्यम से नेटकैट ट्रैफ़िक को रूट करना), तो मैं बहुत सराहना करूंगा यदि आप उन सभी को साझा कर सकें।

अग्रिम में बहुत धन्यवाद।

जवाबों:


14

Netcat एक विशेष HTTP क्लाइंट नहीं है। Netcat के लिए प्रॉक्सी सर्वर के माध्यम से कनेक्ट करने का मतलब है कि सर्वर के माध्यम से एक टीसीपी कनेक्शन बनाना , यही कारण है कि यह -xतर्क के साथ एक सॉक्स या HTTPS प्रॉक्सी की अपेक्षा करता है, द्वारा निर्दिष्ट -X:

 -X proxy_protocol
         Requests that nc should use the specified protocol when talking
         to the proxy server.  Supported protocols are “4” (SOCKS v.4),
         “5” (SOCKS v.5) and “connect” (HTTPS proxy).  If the protocol is
         not specified, SOCKS version 5 is used.

connectएक प्रॉक्सी सर्वर के माध्यम से SSL (HTTPS) कनेक्शन बनाने के लिए एक विधि निर्दिष्ट करता है। चूंकि प्रॉक्सी अन्य अंतिम बिंदु नहीं है और कनेक्शन एंडपॉइंट-वार एन्क्रिप्टेड है, एक CONNECTअनुरोध आपको HTTP प्रॉक्सी (यदि यह अनुमति है) के माध्यम से पॉइंट-टू-पॉइंट कनेक्शन को सुरंग करने की अनुमति देता है। (मैं यहां विवरणों पर प्रकाश डाल सकता हूं, लेकिन यह किसी भी तरह महत्वपूर्ण बिंदु नहीं है, यहां " HTTP CONNECTसुरंग" पर विवरण )

तो , प्रॉक्सी का उपयोग करके अपने वेबसर्वर से कनेक्ट करने के लिए, आपको वह करना होगा जो वेब ब्राउज़र करेगा - प्रॉक्सी से बात करें :

$ nc squid-proxy 3128
GET http://webserver/sample HTTP/1.0

( उस प्रश्न में इसकी समानताएँ हैं; मुझे नहीं पता कि proxychainयहाँ उपयोग की बात है। )

परिशिष्ट एक सामान्य HTTP प्रॉक्सी, उदाहरण के लिए स्क्वीड (जैसा कि मुझे पता है) का उपयोग कर एक ब्राउज़र , उदाहरण के तौर पर कम से कम क्या उदाहरण देता है, जैसा कि नेटकाट आपको दिखा सकता है: ncकॉल के बाद , मैंने प्रॉक्सी के जरिए 127.0.0.1 पोर्ट 8080 का उपयोग करने के लिए फ़ायरफ़ॉक्स को कॉन्फ़िगर किया। और Google को खोलने की कोशिश की, यह वही था जो आउटपुट (माइनस ए कुकी) था:

$ nc -l 8080
GET http://google.com/ HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT: 1
Proxy-Connection: keep-alive

इस तरह से व्यवहार करके , आप HTTP प्रॉक्सी के माध्यम से HTTP सर्वर तक पहुंचने के लिए Netcat का उपयोग कर सकते हैं। अब, यदि आप HTTPS वेबसर्वर तक पहुँचने का प्रयास करते हैं तो क्या होना चाहिए? ब्राउज़र को निश्चित रूप से बीच में किसी को भी ट्रैफ़िक नहीं दिखाना चाहिए , इसलिए एक सीधा कनेक्शन की आवश्यकता है; और यह वह जगह है जहाँ CONNECTखेलने में आता है। जब मैं फिर से शुरू करूं nc -l 8080और कहूं कि एक्सेस करने की कोशिश करो, https://google.comतो प्रॉक्सी सेट के साथ 127.0.0.1:80, यह वही है जो सामने आता है:

CONNECT google.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Proxy-Connection: keep-alive
Host: google.com

आप देखते हैं, CONNECTअनुरोध सर्वर से सीधे कनेक्शन ( google.comपोर्ट 443) के लिए पूछता है । अब , यह अनुरोध क्या करता है?

$ nc -X connect -x 127.0.0.1:8080 google.com 443

nc -l 8080उदाहरण से आउटपुट :

CONNECT google.com:443 HTTP/1.0

तो यह सीधा कनेक्शन बनाने के लिए उसी तरह का उपयोग करता है। हालाँकि, चूंकि यह लगभग किसी भी चीज़ के लिए शोषण किया जा सकता है (उदाहरण के लिए corkscrew), CONNECTअनुरोध आमतौर पर केवल स्पष्ट बंदरगाहों तक ही सीमित होते हैं।


@ sr_ क्या आप इस बारे में थोड़ा और विस्तार कर सकते हैं कि एक ब्राउज़र कैसे प्राप्त कर सकता है ... सर्वर भाग के माध्यम से टीसीपी कनेक्शन ? मोजे 4, मोजे 5 और कनेक्ट की तरह, ऐसा लगता है कि सादा HTTP प्रॉक्सी के लिए भी एक प्रोटोकॉल है। क्या आप इसकी पुष्टि करेंगे? बहुत धन्यवाद।
हैरी

1
@BruceEdiger, हाँ, वास्तव में। मैं 0.1अपनी अज्ञानता को दूर करने के लिए घटाया । :)
sr_

1
@ हैरी ncऔर फ़ायरफ़ॉक्स के साथ खेलने के बारे में बातें थोड़ी स्पष्ट करती हैं?
sr_

@sr_ मैंने nc squid-proxy 3128इसके बाद प्रयास किया GET http://webserver/sample HTTP/1.0, लेकिन HTTP / 1.0 403 निषिद्ध (एक्सेस अस्वीकृत)।
हैरी

1
ऊ, सॉरी, नो आइडिया। यहां कोई विशेषज्ञ नहीं है, आप देखते हैं कि :)आप संभवतः अपने स्वयं के कनेक्शन का उपयोग tcpdumpया wiresharkटैप कर सकते हैं CONNECTऔर अंतर्दृष्टि प्राप्त कर सकते हैं ...
sr_

3

समाज पर एक नज़र डालें: http://www.dest-unreach.org/socat/doc/README


धन्यवाद, +1। एक बहुत ही परिष्कृत और जटिल उपकरण की तरह दिखता है। कोशिश की echo "GET /sample HTTP/1.0" | socat PROXY:squid-proxy:web-server:80,proxyport=3128 STDIN, लेकिन यह त्रुटि मिली 2012/05/17 06:56:23 socat[3135] E CONNECT web-server:80: Forbidden:। अब, बस यह देखने के लिए कि क्या मैंने इस उपकरण को सही समझा है, मैंने अगली बार बुनियादी, गैर-प्रॉक्सी उपयोग की कोशिश की: echo "GET /sample HTTP/1.0" | socat TCP4:web-server:80 STDINलेकिन वापस कोई प्रतिक्रिया नहीं मिली! इसलिए, जाहिर है, मैं यहां सोसाइटी के उपयोग में कुछ याद कर रहा हूं। सराहना करेंगे यदि आप मेरी गलती को इंगित कर सकते हैं।
हैरी

ठीक है, मुझे इसके बजाय STDIO(या -) का उपयोग करके काम करने के लिए गैर-प्रॉक्सी संस्करण आह्वान मिल सकता है STDIN। लेकिन प्रॉक्सी संस्करण अभी भी मुझे वही त्रुटि दे रहा है।
हैरी

1
एक और अपडेट: मैंने कोशिश की echo "GET http://web-server/sample" | socat - TCP:squid-proxy:3128और यह काम कर गया। क्या आप इस बात की पुष्टि करेंगे कि यह कैसे है (मुझे पता विनिर्देश के socatबजाय) का उपयोग करना चाहिए PROXY:...?
हैरी

1
नमस्ते, मैंने इसे खुद इतना इस्तेमाल नहीं किया है, लेकिन मुझे लगता है कि यह सही है। सुकैट HTTP- प्रॉक्सी के लिए एक सादा टीसीपी-कनेक्शन खोलता है और http-GET को पार करता है और बाकी काम करता है। क्या यह https btw के लिए काम करता है। और अंत में एक और लिंक: technostuff.blogspot.com/2008/10/…
फैबियन ज़ींड्ल

नहीं, मैंने अभी तक https की कोशिश नहीं की है। मुझे जल्द ही https के बारे में भी चिंता होगी। धन्यवाद।
हैरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.