Update server.py

This commit is contained in:
Namhyeon Go 2024-02-27 18:30:05 +09:00 committed by GitHub
parent c7d434b9b3
commit 8ed755ccd9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -58,6 +58,7 @@ args = parser.parse_args()
max_connection = args.max_conn max_connection = args.max_conn
buffer_size = args.buffer_size buffer_size = args.buffer_size
accepted_relay = {} accepted_relay = {}
resolved_address_list = []
# https://stackoverflow.com/questions/25475906/set-ulimit-c-from-outside-shell # https://stackoverflow.com/questions/25475906/set-ulimit-c-from-outside-shell
resource.setrlimit( resource.setrlimit(
@ -478,15 +479,18 @@ def proxy_server(webserver, port, scheme, method, url, conn, addr, data):
} }
# get client address # get client address
try: print ("[*] resolving the client address...")
_, query_data = jsonrpc2_encode('get_client_address') while len(resolved_address_list) == 0:
query = requests.post(server_url, headers=proxy_data['headers'], data=query_data, timeout=1) try:
if query.status_code == 200: _, query_data = jsonrpc2_encode('get_client_address')
result = query.json()['result'] query = requests.post(server_url, headers=proxy_data['headers'], data=query_data, timeout=1)
proxy_data['data']['client_address'] = result['client_address'] if query.status_code == 200:
print ("[*] Resolved IP: %s" % (result['client_address'])) result = query.json()['result']
except requests.exceptions.ReadTimeout as e: resolved_address_list.append(result['client_address'])
pass print ("[*] resolved IP: %s" % (result['client_address']))
except requests.exceptions.ReadTimeout as e:
pass
proxy_data['data']['client_address'] = resolved_address_list[0]
# build a tunnel # build a tunnel
try: try:
@ -499,11 +503,20 @@ def proxy_server(webserver, port, scheme, method, url, conn, addr, data):
# wait for the relay # wait for the relay
print ("[*] waiting for the relay... %s" % (id)) print ("[*] waiting for the relay... %s" % (id))
while not id in accepted_relay: max_reties = 30
t = 0
while t < max_reties and not id in accepted_relay:
time.sleep(1) time.sleep(1)
sock = accepted_relay[id] t += 1
print ("[*] connected the relay. %s" % (id)) if t < max_reties:
sendall(sock, conn, data) sock = accepted_relay[id]
print ("[*] connected the relay. %s" % (id))
sendall(sock, conn, data)
else:
resolved_address_list.remove(resolved_address_list[0])
print ("[*] the relay is gone. %s" % (id))
sock_close(sock, is_ssl)
return
# get response # get response
i = 0 i = 0