Proxy Sunucusu Yapımı


Sunucunuzu proxy olarak yapılandırıp başak sunucularda veya API isteklerinizde kullanabilirsiniz. Bunu yapan birçok program var, biz ise hem Linux hem de Windows sunucularda sorunsuz çalışacak şekilde basit bir python yazılımı yazdık. İsteyen daha da geliştirip kullanabilir.
proxy.py
# Bu proje Ondex Sistemleri tarafından hazırlanmıştır.
import http.server
import socketserver
import requests
import socket
from urllib.parse import urlparse, urlunparse
PORT = 5353 # Proxynizin çalışacağı port burada olacak.
class Proxy(http.server.BaseHTTPRequestHandler):
def forward_request(self, method):
parsed_url = urlparse(self.path)
if not parsed_url.netloc:
self.send_response(400)
self.end_headers()
self.wfile.write(b"Bad Request: Invalid or missing URL.")
return
target_url = urlunparse(parsed_url)
print(f"Proxying {method} request to: {target_url}")
try:
headers = dict(self.headers)
headers.pop("Host", None)
body = self.rfile.read(int(self.headers.get('Content-Length', 0))) if 'Content-Length' in self.headers else None
response = requests.request(
method,
target_url,
headers=headers,
data=body,
stream=True
)
self.send_response(response.status_code)
for header, value in response.headers.items():
self.send_header(header, value)
self.end_headers()
for chunk in response.iter_content(chunk_size=4096):
self.wfile.write(chunk)
except Exception as e:
self.send_response(500)
self.end_headers()
self.wfile.write(f"Error: {str(e)}".encode())
def do_GET(self):
self.forward_request("GET")
def do_POST(self):
self.forward_request("POST")
def do_PUT(self):
self.forward_request("PUT")
def do_DELETE(self):
self.forward_request("DELETE")
def do_OPTIONS(self):
self.forward_request("OPTIONS")
def do_HEAD(self):
self.forward_request("HEAD")
def do_CONNECT(self):
print(f"CONNECT request: {self.path}")
try:
host, port = self.path.split(":")
port = int(port)
with socket.create_connection((host, port)) as sock:
self.send_response(200, "Connection established")
self.end_headers()
self.wfile.flush()
self.connection.setblocking(0)
sock.setblocking(0)
while True:
try:
data_from_client = self.connection.recv(4096)
if data_from_client:
sock.sendall(data_from_client)
except:
pass
try:
data_from_server = sock.recv(4096)
if data_from_server:
self.connection.sendall(data_from_server)
except:
pass
except Exception as e:
self.send_response(500)
self.end_headers()
self.wfile.write(f"Error: {str(e)}".encode())
with socketserver.ThreadingTCPServer(("", PORT), Proxy) as httpd:
print(f"Serving HTTP Proxy on port {PORT}")
httpd.serve_forever()
Kurulum
pip install requests
Yukarıdaki gibi requests kütüphanesini indirdikten sonra aşağıdaki komutla python kodumuzu çalıştırıyoruz.
python3 proxy.py
Kurulum bitti, http://127.0.0.1:5353 adresi artık sizin proxy adresiniz. Dilerseniz koddaki 5353 yazan yeri değiştirerek proxynizin çalışacağı portu değiştirebilirsiniz.
İPUCU: Eğer Tor Ağı Yönlendirmeyi aktif edip bu proxy.py dosyasını çalıştırırsanız http://127.0.0.1:5353 adresi http Tor proxy adresi olur. Yani socks5 Tor proxysını http yapmış olursunuz.
Subscribe to my newsletter
Read articles from OndexSystems directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
