Last active
December 15, 2021 22:20
-
-
Save angeloped/8af539ff0231ff6326bfa5ca74ab8eb9 to your computer and use it in GitHub Desktop.
Connect socket client to proxy in Python.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import socks | |
import socket | |
################################################################################ | |
# title: Proxy Client Socket | |
# author: Bryan Angelo Pedrosa | |
# date: 12/15/2021 | |
################################################################################ | |
class ProxyRequest: | |
def strip_url(self, url): | |
return url.split("://")[1].split("/")[0] | |
def create_connection(self, address, timeout=None, source_address=None): | |
sock = socks.socksocket() | |
sock.connect(address) | |
return sock | |
def strip_http_headers(self, http_reply): | |
return http_reply.split("\r\n\r\n")[1] | |
def extract_headers(self, http_reply): | |
header_ln = http_reply.split("\r\n\r\n")[0].split("\r\n") | |
header_ln = [_ln.split(": ") for _ln in header_ln] | |
header_ln[0] = [header_ln[0][0], ""] # P.S. modify method | |
return {_ln[0]:_ln[1] for _ln in header_ln} | |
def __init__(self, url="", port=80, proxies=["127.0.0.1", 9050]): | |
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, proxies[0], proxies[1], True) | |
s = socks.socksocket() | |
s.settimeout(1) | |
s.connect((self.strip_url(url), port)) | |
message = u"GET / HTTP/1.1\r\nHost: {1}\r\n\r\n".format(url, self.strip_url(url)) | |
s.sendall(message.encode()) | |
# receive all | |
reply = "" | |
while 1: | |
try: | |
data = s.recv(4096) | |
reply += data | |
except socket.timeout: | |
break | |
# response | |
self.http_msg = reply.decode("utf-8") | |
self.http_headers = self.extract_headers(reply.decode("utf-8")) | |
self.http_body = self.strip_http_headers(reply.decode("utf-8")) | |
################################################################################ | |
if __name__ == "__main__": | |
proxreq = ProxyRequest(url="http://ifconfig.me/", port=80, proxies=["127.0.0.1", 9050]) | |
print(proxreq.http_msg) | |
print(proxreq.http_headers) | |
print(proxreq.http_body) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment