Created
September 2, 2023 10:31
-
-
Save icecore2/4bfb098ddd1560af24d85e83821b5006 to your computer and use it in GitHub Desktop.
simple-proxy-server.py
This file contains 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
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