Started working on bank scanner
This commit is contained in:
parent
7a7417ac1c
commit
da7c809a16
37
src/bank_protocol/bank_scanner.py
Normal file
37
src/bank_protocol/bank_scanner.py
Normal file
@ -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
|
@ -28,10 +28,4 @@ class BankProxy():
|
|||||||
raise NoPortsOpenError("Destination host has no open ports from range")
|
raise NoPortsOpenError("Destination host has no open ports from range")
|
||||||
|
|
||||||
def __proxy_request(self, port):
|
def __proxy_request(self, port):
|
||||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
|
pass
|
||||||
client_socket.connect((self.address, port))
|
|
||||||
|
|
||||||
client_socket.sendall(self.request.as_request())
|
|
||||||
|
|
||||||
response = client_socket.recv(1024)
|
|
||||||
return response
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user