From da7c809a16ffde134cadd72d7e4d98a389386a70 Mon Sep 17 00:00:00 2001 From: Thastertyn Date: Thu, 6 Feb 2025 15:17:37 +0100 Subject: [PATCH] Started working on bank scanner --- src/bank_protocol/bank_scanner.py | 37 ++++++++++++++++++++++++++++++ src/bank_protocol/proxy_handler.py | 8 +------ 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 src/bank_protocol/bank_scanner.py diff --git a/src/bank_protocol/bank_scanner.py b/src/bank_protocol/bank_scanner.py new file mode 100644 index 0000000..eb025fd --- /dev/null +++ b/src/bank_protocol/bank_scanner.py @@ -0,0 +1,37 @@ +from typing import Optional +import socket +import threading +import logging + +class BankScanner(): + def __init__(self, host: str, port_start: int, port_end: int): + self.logger = logging.getLogger(__name__) + self.host = host + self.port_start = port_start + self.port_end = port_end + + def scan(self) -> Optional[socket]: + threads = [] + + for port in range(self.port_start, self.port_end + 1): + t = threading.Thread(target=self.__probe_for_open_ports, args=(self.host, port,), name=f"ScannerThread-{self.host}:{port}") + threads.append(t) + + def __probe_for_open_ports(self, host: str, port: int) -> Optional[socket]: + try: + connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + connection.connect((host, port)) + self.__scan_for_bank(connection) + except socket.error as e: + if e.errno == 111: # Connection refused + self.logger.debug("Port %d not open", port) + + def __scan_for_bank(self, connection: socket.socket): + ping_command = "BC" + connection.sendall(ping_command.encode("utf-8")) + response = connection.recv(1024) + + host, port = connection.getpeername() + if response == f"BC {host}\n\r": + self.logger.debug("Bank application found on %s:%s", host, port) + return connection diff --git a/src/bank_protocol/proxy_handler.py b/src/bank_protocol/proxy_handler.py index 4c356fa..bb847f1 100644 --- a/src/bank_protocol/proxy_handler.py +++ b/src/bank_protocol/proxy_handler.py @@ -28,10 +28,4 @@ class BankProxy(): raise NoPortsOpenError("Destination host has no open ports from range") def __proxy_request(self, port): - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: - client_socket.connect((self.address, port)) - - client_socket.sendall(self.request.as_request()) - - response = client_socket.recv(1024) - return response + pass