Update server.py

This commit is contained in:
Namhyeon Go 2024-02-17 17:44:19 +09:00 committed by GitHub
parent cdb87f15ff
commit b9483795c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,5 +1,6 @@
# gnh1201/php-httpproxy # gnh1201/php-httpproxy
# Go Namyheon <gnh1201@gmail.com> # Namyheon Go (Catswords Research) <gnh1201@gmail.com>
# https://github.com/gnh1201
# Created at: 2022-10-06 # Created at: 2022-10-06
# Updated at: 2024-12-17 # Updated at: 2024-12-17
@ -127,9 +128,13 @@ def proxy_connect(webserver, conn):
return (conn, data) return (conn, data)
def proxy_filter(response): def proxy_check_filtered(response):
# todo filtered = response.find(b'@misskey.io') > -1
pass
if filtered:
print ("[*] filtered: %s" % (response.decode(client_encoding)))
return filtered
def proxy_server(webserver, port, scheme, method, url, conn, addr, data): def proxy_server(webserver, port, scheme, method, url, conn, addr, data):
try: try:
@ -139,32 +144,40 @@ def proxy_server(webserver, port, scheme, method, url, conn, addr, data):
if scheme in [b'https', b'tls', b'ssl'] and method == b'CONNECT': if scheme in [b'https', b'tls', b'ssl'] and method == b'CONNECT':
conn, data = proxy_connect(webserver, conn) conn, data = proxy_connect(webserver, conn)
except Exception as e: except Exception as e:
raise Exception("SSL negotiation failed. %s" % (str(e))) raise Exception("SSL negotiation failed. (%s:%s) %s" % (webserver.decode(client_encoding), str(port), str(e)))
response = b'' response = b''
if server_url == "localhost": if server_url == "localhost":
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
context = ssl.create_default_context() if scheme in [b'https', b'tls', b'ssl']:
context.check_hostname = False context = ssl.create_default_context()
context.verify_mode = ssl.CERT_NONE context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
ssl_sock = context.wrap_socket(sock, server_hostname=webserver) sock = context.wrap_socket(sock, server_hostname=webserver.decode(client_encoding))
ssl_sock.connect((webserver, port)) sock.connect((webserver, port))
ssl_sock.sendall(data) sock.sendall(data)
else:
sock.connect((webserver, port))
sock.sendall(data)
i = 0 i = 0
while True: while True:
chunk = ssl_sock.recv(buffer_size) chunk = sock.recv(buffer_size)
if not chunk: if not chunk:
break break
response += chuck response += chunk
proxy_filter(response) if proxy_check_filtered(response):
break
conn.send(chunk) conn.send(chunk)
i += 1 i += 1
print("[*] Received %s chucks. (%s bytes per chuck)" % (str(i), str(buffer_size))) print("[*] Received %s chucks. (%s bytes per chuck)" % (str(i), str(buffer_size)))
else: else:
proxy_data = { proxy_data = {
'headers': { 'headers': {
"User-Agent": "php-httpproxy/0.1.3 (Client; Python " + python_version() + "; abuse@catswords.net)", "User-Agent": "php-httpproxy/0.1.3 (Client; Python " + python_version() + "; abuse@catswords.net)",
@ -189,7 +202,8 @@ def proxy_server(webserver, port, scheme, method, url, conn, addr, data):
relay = requests.post(server_url, headers=proxy_data['headers'], data=raw_data, stream=True) relay = requests.post(server_url, headers=proxy_data['headers'], data=raw_data, stream=True)
for chunk in relay.iter_content(chunk_size=buffer_size): for chunk in relay.iter_content(chunk_size=buffer_size):
response += chuck response += chuck
proxy_filter(response) if not proxy_check_filtered(response):
break
conn.send(chunk) conn.send(chunk)
i += 1 i += 1