Skip to content

Instantly share code, notes, and snippets.

@angeloped
Last active December 15, 2021 22:20
Show Gist options
  • Save angeloped/8af539ff0231ff6326bfa5ca74ab8eb9 to your computer and use it in GitHub Desktop.
Save angeloped/8af539ff0231ff6326bfa5ca74ab8eb9 to your computer and use it in GitHub Desktop.
Connect socket client to proxy in Python.
#!/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