fixed websocket test
This commit is contained in:
@@ -497,16 +497,23 @@ server.close_client()
|
|||||||
|
|
||||||
remove_filters()
|
remove_filters()
|
||||||
|
|
||||||
|
#Simulating requests is more complex due to websocket extensions handshake
|
||||||
|
|
||||||
WS_REQUEST_PARSING_TEST = b'GET /sock/?EIO=4&transport=websocket HTTP/1.1\r\nHost: localhost:8080\r\nConnection: Upgrade\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\xac AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\r\nUpgrade: websocket\r\nOrigin: http://localhost:8080\r\nSec-WebSocket-Version: 13\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,zh;q=0.5\r\nCookie: cookie-consent=true; _iub_cs-86405163=%7B%22timestamp%22%3A%222024-09-12T18%3A20%3A18.627Z%22%2C%22version%22%3A%221.65.1%22%2C%22purposes%22%3A%7B%221%22%3Atrue%2C%224%22%3Atrue%7D%2C%22id%22%3A86405163%2C%22cons%22%3A%7B%22rand%22%3A%222b09e6%22%7D%7D\r\nSec-WebSocket-Key: eE01O3/ZShPKsrykACLAaA==\r\nSec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n\xc1\x84#\x8a\xb2\xbb\x11\xbb\xb2\xbb'
|
WS_REQUEST_PARSING_TEST = b'GET /sock/?EIO=4&transport=websocket HTTP/1.1\r\nHost: localhost:8080\r\nConnection: Upgrade\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\xac AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\r\nUpgrade: websocket\r\nOrigin: http://localhost:8080\r\nSec-WebSocket-Version: 13\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,zh;q=0.5\r\nCookie: cookie-consent=true; _iub_cs-86405163=%7B%22timestamp%22%3A%222024-09-12T18%3A20%3A18.627Z%22%2C%22version%22%3A%221.65.1%22%2C%22purposes%22%3A%7B%221%22%3Atrue%2C%224%22%3Atrue%7D%2C%22id%22%3A86405163%2C%22cons%22%3A%7B%22rand%22%3A%222b09e6%22%7D%7D\r\nSec-WebSocket-Key: eE01O3/ZShPKsrykACLAaA==\r\nSec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n\xc1\x84#\x8a\xb2\xbb\x11\xbb\xb2\xbb'
|
||||||
|
WS_RESPONSE_PARSING_TEST = b'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: eGnJqUSoSKE3wOfKD2M3G82RsS8=\r\nSec-WebSocket-Extensions: permessage-deflate\r\ndate: Sat, 15 Mar 2025 12:04:19 GMT\r\nserver: uvicorn\r\n\r\n\xc1_2\xa8V*\xceLQ\xb2Rr1\xb4\xc8\xf6r\x0c\xf3\xaf\xd25\xf7\x8e\xf4\xb3LsttrW\xd2Q*-H/JLI-V\xb2\x8a\x8e\xd5Q*\xc8\xccK\x0f\xc9\xccM\xcd/-Q\xb222\x00\x02\x88\x98g^IjQYb\x0eP\xd0\x14,\x98\x9bX\x11\x90X\x99\x93\x9f\x084\xda\xd0\x00\x0cj\x01\x00\xc1\x1b21\x80\xd9e\xe1n\x19\x9e\xe3RP\x9a[Z\x99\x93j\xea\x15\x00\xb4\xcbC\xa9\x16\x00'
|
||||||
|
|
||||||
HTTP_REQUEST_WS_PARSING_TEST = """
|
HTTP_REQUEST_WS_PARSING_TEST = """
|
||||||
from firegex.nfproxy.models import HttpRequest
|
from firegex.nfproxy.models import HttpRequest, HttpResponse
|
||||||
from firegex.nfproxy import pyfilter, ACCEPT, UNSTABLE_MANGLE, DROP, REJECT
|
from firegex.nfproxy import pyfilter, ACCEPT, UNSTABLE_MANGLE, DROP, REJECT
|
||||||
|
|
||||||
@pyfilter
|
@pyfilter
|
||||||
def data_type_test(req:HttpRequest):
|
def data_type_test(req:HttpRequest):
|
||||||
print(req)
|
print(req)
|
||||||
|
|
||||||
|
@pyfilter
|
||||||
|
def data_type_test(req:HttpResponse):
|
||||||
|
print(req)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if firegex.nfproxy_set_code(service_id, HTTP_REQUEST_WS_PARSING_TEST):
|
if firegex.nfproxy_set_code(service_id, HTTP_REQUEST_WS_PARSING_TEST):
|
||||||
@@ -516,7 +523,7 @@ else:
|
|||||||
exit_test(1)
|
exit_test(1)
|
||||||
|
|
||||||
server.connect_client()
|
server.connect_client()
|
||||||
server.send_packet(WS_REQUEST_PARSING_TEST)
|
server.send_packet(WS_REQUEST_PARSING_TEST, server_reply=WS_RESPONSE_PARSING_TEST)
|
||||||
if server.recv_packet():
|
if server.recv_packet():
|
||||||
puts("The HTTP websocket upgrade request was successfully parsed ✔", color=colors.green)
|
puts("The HTTP websocket upgrade request was successfully parsed ✔", color=colors.green)
|
||||||
else:
|
else:
|
||||||
@@ -526,35 +533,6 @@ server.close_client()
|
|||||||
|
|
||||||
remove_filters()
|
remove_filters()
|
||||||
|
|
||||||
WS_RESPONSE_PARSING_TEST = b'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: eGnJqUSoSKE3wOfKD2M3G82RsS8=\r\nSec-WebSocket-Extensions: permessage-deflate\r\ndate: Sat, 15 Mar 2025 12:04:19 GMT\r\nserver: uvicorn\r\n\r\n\xc1_2\xa8V*\xceLQ\xb2Rr1\xb4\xc8\xf6r\x0c\xf3\xaf\xd25\xf7\x8e\xf4\xb3LsttrW\xd2Q*-H/JLI-V\xb2\x8a\x8e\xd5Q*\xc8\xccK\x0f\xc9\xccM\xcd/-Q\xb222\x00\x02\x88\x98g^IjQYb\x0eP\xd0\x14,\x98\x9bX\x11\x90X\x99\x93\x9f\x084\xda\xd0\x00\x0cj\x01\x00\xc1\x1b21\x80\xd9e\xe1n\x19\x9e\xe3RP\x9a[Z\x99\x93j\xea\x15\x00\xb4\xcbC\xa9\x16\x00'
|
|
||||||
|
|
||||||
HTTP_RESPONSE_WS_PARSING_TEST = """
|
|
||||||
from firegex.nfproxy.models import HttpResponse
|
|
||||||
from firegex.nfproxy import pyfilter, ACCEPT, UNSTABLE_MANGLE, DROP, REJECT
|
|
||||||
|
|
||||||
@pyfilter
|
|
||||||
def data_type_test(req:HttpResponse):
|
|
||||||
print(req)
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
if firegex.nfproxy_set_code(service_id, HTTP_RESPONSE_WS_PARSING_TEST):
|
|
||||||
puts("Sucessfully added filter websocket parsing with HttpResponse ✔", color=colors.green)
|
|
||||||
else:
|
|
||||||
puts("Test Failed: Couldn't add the websocket parsing filter ✗", color=colors.red)
|
|
||||||
exit_test(1)
|
|
||||||
|
|
||||||
server.connect_client()
|
|
||||||
server.send_packet(WS_RESPONSE_PARSING_TEST)
|
|
||||||
if server.recv_packet():
|
|
||||||
puts("The HTTP websocket upgrade response was successfully parsed ✔", color=colors.green)
|
|
||||||
else:
|
|
||||||
puts("Test Failed: The HTTP websocket upgrade response wasn't parsed (an error occurred) ✗", color=colors.red)
|
|
||||||
exit_test(1)
|
|
||||||
server.close_client()
|
|
||||||
|
|
||||||
remove_filters()
|
|
||||||
|
|
||||||
#Rename service
|
#Rename service
|
||||||
if firegex.nfproxy_rename_service(service_id,f"{args.service_name}2"):
|
if firegex.nfproxy_rename_service(service_id,f"{args.service_name}2"):
|
||||||
puts(f"Sucessfully renamed service to {args.service_name}2 ✔", color=colors.green)
|
puts(f"Sucessfully renamed service to {args.service_name}2 ✔", color=colors.green)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from multiprocessing import Process
|
from multiprocessing import Process, Queue
|
||||||
import socket
|
import socket
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@@ -8,10 +8,11 @@ class TcpServer:
|
|||||||
self.ipv6 = ipv6
|
self.ipv6 = ipv6
|
||||||
self.port = port
|
self.port = port
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
|
self._server_data_queue = Queue()
|
||||||
self._regen_process()
|
self._regen_process()
|
||||||
|
|
||||||
def _regen_process(self):
|
def _regen_process(self):
|
||||||
def _startServer(port):
|
def _startServer(port, server_queue:Queue):
|
||||||
sock = socket.socket(socket.AF_INET6 if self.ipv6 else socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET6 if self.ipv6 else socket.AF_INET, socket.SOCK_STREAM)
|
||||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
sock.bind(('::1' if self.ipv6 else '127.0.0.1', port))
|
sock.bind(('::1' if self.ipv6 else '127.0.0.1', port))
|
||||||
@@ -23,6 +24,10 @@ class TcpServer:
|
|||||||
buf = connection.recv(4096)
|
buf = connection.recv(4096)
|
||||||
if buf == b'':
|
if buf == b'':
|
||||||
break
|
break
|
||||||
|
try:
|
||||||
|
buf = server_queue.get(block=False)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("SERVER: ", buf)
|
print("SERVER: ", buf)
|
||||||
connection.sendall(buf)
|
connection.sendall(buf)
|
||||||
@@ -30,7 +35,7 @@ class TcpServer:
|
|||||||
if self.verbose:
|
if self.verbose:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
connection.close()
|
connection.close()
|
||||||
self.server = Process(target=_startServer,args=[self.port])
|
self.server = Process(target=_startServer,args=[self.port, self._server_data_queue])
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.server.start()
|
self.server.start()
|
||||||
@@ -49,9 +54,11 @@ class TcpServer:
|
|||||||
if self.client_sock:
|
if self.client_sock:
|
||||||
self.client_sock.close()
|
self.client_sock.close()
|
||||||
|
|
||||||
def send_packet(self, packet):
|
def send_packet(self, packet, server_reply=None):
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
print("CLIENT: ", packet)
|
print("CLIENT: ", packet)
|
||||||
|
if server_reply:
|
||||||
|
self._server_data_queue.put(server_reply)
|
||||||
self.client_sock.sendall(packet)
|
self.client_sock.sendall(packet)
|
||||||
|
|
||||||
def recv_packet(self):
|
def recv_packet(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user