명령줄, 일반 HTTP 프록시(예: Squid)가 있나요?

명령줄, 일반 HTTP 프록시(예: Squid)가 있나요?

Netcat(또는 Socat)을 사용하여 브라우저와 특정 호스트:포트 간의 트래픽을 쉽게 캡처할 수 있습니다.

하지만 Linux의 경우 HTTP 클라이언트(브라우저 또는 명령줄 프로그램)와 임의의 호스트:포트 간의 트래픽을 캡처하는 데 사용할 수 있는 Squid의 HTTP 프록시에 해당하는 명령줄이 있습니까?

답변1

Perl과 Python(그리고 아마도 Ruby)에는 간단한 HTTP 프록시를 빠르게 구축하는 데 사용할 수 있는 간단한 툴킷이 있습니다.

Perl에서는 다음을 사용하십시오.HTTP::프록시. 다음은 설명서의 3줄 예제입니다. 요청이나 응답을 필터링하거나 기록하거나 다시 작성하려면 필터를 추가하세요. 예제는 설명서를 참조하세요.

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;

파이썬에서는 다음을 사용합니다.간단한 HTTP 서버. 다음은 약간 수정된 샘플 코드입니다.효과 로봇. do_GET요청이나 응답을 필터링, 기록 또는 다시 작성하려면 메서드(또는 기타 메서드)를 조정하세요 .

import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()

답변2

이것이 최선의 해결책은 아닐 수도 있지만,어느프록시를 사용하는 경우 특정 프록시가 있으므로 host:portnetcat 솔루션은 여전히 ​​작동합니다. 단, 이를 이해하려면 프록시 메타데이터의 압축을 풀어야 합니다.

가장 쉬운 방법은 임의의 익명 프록시를 사용하고 모든 트래픽을 netcat. (즉, 브라우저 프록시를 설정 localhost:port한 후 실제 프록시로 데이터를 전달하는 것입니다.)

로컬 프록시를 갖고 싶다면 SOCKS5 프록시가 ssh -D <port> localhost가장 쉬운 옵션일 것입니다. 분명히 "http" 프록시 대신 "socks" 프록시를 사용하도록 브라우저에 지시해야 합니다.

따라서 다음과 같습니다(로컬 시스템이 들어오는 SSH 연결을 수락한다고 가정).

ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000

물론 이것은 한 번의 브라우저 연결 시도와 종료에만 작동하며 반환 데이터를 브라우저에 전달하려고 시도하지 않았으므로 전체 netcat솔루션이 필요합니다.

답변3

https://mitmproxy.org/

한 가지 예:

mitmdump  --ssl-insecure --mode reverse:google.com

관련 정보