mirror of
				https://github.com/catspace-dev/unicheckbot.git
				synced 2025-11-04 01:17:30 +03:00 
			
		
		
		
	rewrite tcp port check
This commit is contained in:
		
							parent
							
								
									16343d6ea0
								
							
						
					
					
						commit
						cd2e0002f8
					
				| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								apps/api/api/checkers/port.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								apps/api/api/checkers/port.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user