Skip to content

Instantly share code, notes, and snippets.

@icecore2
Created September 2, 2023 10:31
Show Gist options
  • Save icecore2/4bfb098ddd1560af24d85e83821b5006 to your computer and use it in GitHub Desktop.
Save icecore2/4bfb098ddd1560af24d85e83821b5006 to your computer and use it in GitHub Desktop.
simple-proxy-server.py
import socket
import threading
def handle_client(client_socket, remote_ip, remote_port):
# Create a socket object for remote connection
remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the remote server
remote_socket.connect((remote_ip, remote_port))
# Forward packets between client and server
while True:
# Receiving data from client
client_data = client_socket.recv(4096)
# If client closed the connection
if not client_data:
break
# Send data to remote server
remote_socket.send(client_data)
# Receive data from remote server
remote_data = remote_socket.recv(4096)
# If remote server closed the connection
if not remote_data:
break
# Send data back to client
client_socket.send(remote_data)
# Close both client and remote sockets
client_socket.close()
remote_socket.close()
def main():
local_ip = '127.0.0.1'
local_port = 9999
remote_ip = 'www.google.com'
remote_port = 80
# Create a socket object
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the local address
server_socket.bind((local_ip, local_port))
# Listen for incoming connections
server_socket.listen(5)
print(f"[*] Listening on {local_ip}:{local_port} ...")
while True:
# Accept incoming connection
client_socket, client_address = server_socket.accept()
print(f"[*] Accepted connection from {client_address[0]}:{client_address[1]}")
# Create a thread to handle the client
client_thread = threading.Thread(target=handle_client, args=(client_socket, remote_ip, remote_port))
client_thread.start()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment