diff --git a/apps/api/api/app.py b/apps/api/api/app.py index 7246f25..65aa1cf 100644 --- a/apps/api/api/app.py +++ b/apps/api/api/app.py @@ -26,9 +26,9 @@ def http_check(): @access_token_required def tcp_port_check(): target = request.args.get("target", None) - port = int(request.args.get("port", 80)) + port = int(request.args.get("port", None)) - if not target: + if not target or not port: abort(400) checker = TCPPortChecker(target, port) diff --git a/apps/api/api/checkers/port.py b/apps/api/api/checkers/port.py new file mode 100644 index 0000000..6672ad5 --- /dev/null +++ b/apps/api/api/checkers/port.py @@ -0,0 +1,42 @@ +from core.coretypes import Response, PortResponse, ResponseStatus, ErrorPayload, ErrorCodes +from .base import BaseChecker +import socket + + +class PortChecker(BaseChecker): + + def __init__(self, target: str, port: int, sock: socket.socket): + self.port = port + self.sock = sock + super().__init__(target) + + def check(self) -> Response: + # 2 seconds timeout... + self.sock.settimeout(2) + + try: + res = self.sock.connect_ex((self.target, self.port)) + except socket.gaierror: + return Response( + status=ResponseStatus.ERROR, + payload=ErrorPayload( + message="Invalid hostname", + code=ErrorCodes.InvalidHostname + ), + node=self.node_info + ) + if res == 0: + self.sock.close() + return Response( + status=ResponseStatus.OK, + payload=PortResponse(open=True), + node=self.node_info + ) + self.sock.close() + return Response( + status=ResponseStatus.OK, + payload=PortResponse(open=False), + node=self.node_info + ) + + diff --git a/apps/api/api/checkers/tcp_port.py b/apps/api/api/checkers/tcp_port.py index 369ef63..bc03005 100644 --- a/apps/api/api/checkers/tcp_port.py +++ b/apps/api/api/checkers/tcp_port.py @@ -1,42 +1,13 @@ -from core.coretypes import Response, PortResponse, ResponseStatus, ErrorPayload, ErrorCodes -from .base import BaseChecker +from .port import PortChecker import socket -class TCPPortChecker(BaseChecker): +class TCPPortChecker(PortChecker): def __init__(self, target: str, port: int): - self.port = port - super().__init__(target) - - def check(self) -> Response: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - # 2 seconds timeout... - sock.settimeout(2) - - try: - res = sock.connect_ex((self.target, self.port)) - except socket.gaierror: - return Response( - status=ResponseStatus.ERROR, - payload=ErrorPayload( - message="Invalid hostname", - code=ErrorCodes.InvalidHostname - ), - node=self.node_info - ) - if res == 0: - sock.close() - return Response( - status=ResponseStatus.OK, - payload=PortResponse(open=True), - node=self.node_info - ) - sock.close() - return Response( - status=ResponseStatus.OK, - payload=PortResponse(open=False), - node=self.node_info + super().__init__( + target=target, + port=port, + sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM) ) -