![netcat이 기존 HTTP 프록시를 사용하도록 만드는 방법](https://linux55.com/image/48460/netcat%EC%9D%B4%20%EA%B8%B0%EC%A1%B4%20HTTP%20%ED%94%84%EB%A1%9D%EC%8B%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8F%84%EB%A1%9D%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음과 같이 웹 서버에 직접 액세스하여 웹 페이지에 액세스할 수 있습니다.
$ echo "GET /sample" | nc web-server 80
This is contents of /sample...
$
이제 프록시 기본 설정을 통해 Firefox 브라우저를 구성하고 HTTP 프록시를 통과하도록 하는 것처럼 netcat이 Squid HTTP 프록시(포트 3128에서 수신 대기)를 통과하도록 하려고 합니다.
나는 성공하지 않고 다음을 시도했습니다.
$ 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
-x
이제 내 것은 ssh/SSL 사용 사례가 아니기 때문에 / -X
옵션을 어떻게 사용하는지, 심지어 사용해야 하는지 잘 모르겠습니다 !
위의 목표를 달성할 수 있는 방법이 두 가지 이상인 경우(예: HTTP 프록시를 통해 netcat 트래픽 라우팅) 모든 방법을 공유해 주시면 감사하겠습니다.
미리 감사드립니다.
답변1
Netcat은 전용 HTTP 클라이언트가 아닙니다. Netcat의 프록시 서버를 통해 연결한다는 것은서버를 통해 TCP 연결 만들기-x
, 이는 다음 과 같이 지정된 매개변수가 있는 SOCKS 또는 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
여기서 어떤 용도로 사용되는지 확실하지 않습니다.)
부록
브라우저 사용정상내가 아는 한 Squid와 같은 HTTP 프록시는 Netcat에서 보여주듯이 예제에서 보여 주는 작업을 어느 정도 수행합니다. 통화 후 nc
127.0.0.1 포트 8080을 프록시로 사용하도록 Firefox를 구성하고 Open 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
행동으로이 방법Netcat을 사용하여 HTTP 프록시를 통해 HTTP 서버에 액세스할 수도 있습니다. 이제 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
포트 (https)에 직접 연결해야 한다는 것을 알 수 있습니다 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
일반적으로 요청은 명백한 포트로 제한됩니다.
답변2
socat을 살펴보십시오.http://www.dest-unreach.org/socat/doc/README