Ejemplo n.º 1
0
 def get_app_command(self, db: Session, port: Port):
     command = port.forward_rule.config.get("command")
     remote_address = port.forward_rule.config.get("remote_address")
     if command.endswith(("relay", "client")):
         remote_ip = dns_query(remote_address)
         port.forward_rule.config['remote_ip'] = remote_ip
         db.add(port.forward_rule)
         db.commit()
         if is_ipv6(remote_ip):
             remote_ip = f"[{remote_ip}]"
     if command == "relay":
         args = (
             f"{command} "
             f"-f :{port.num} "
             f"-t {remote_ip}:{port.forward_rule.config.get('remote_port')}"
         )
     elif command.endswith("server"):
         args = f"{command} -l :{port.num} -p {port.forward_rule.config.get('password')}"
     elif command.endswith("client"):
         server_address = port.forward_rule.config.get("server_address")
         if is_ipv6(server_address):
             server_address = f"[{server_address}]"
         server_port = port.forward_rule.config.get("server_port")
         remote_port = port.forward_rule.config.get("remote_port")
         password = port.forward_rule.config.get("password")
         args = (f"relayoverbrook -f :{port.num} "
                 f"-t {remote_ip}:{remote_port} "
                 f"-p {password} "
                 f"-s {'ws://' if command  == 'wsclient' else ''}"
                 f"{server_address}:{server_port}")
     return f"/usr/local/bin/brook {args}"
Ejemplo n.º 2
0
class TinyPortMapperConfig(AppConfig):
    method = MethodEnum.TINY_PORT_MAPPER

    def __init__(self):
        super().__init__()
        self.app_name = "tiny_port_mapper"
        self.app_path = "/usr/local/bin/"
        self.app_version_arg = "-h"

        self.app_sync_role_name = "tiny_port_mapper_sync"

    def apply(self, db: Session, port: Port):
        self.local_port = port.num
        self.app_command = self.get_app_command(db, port)
        self.update_app = not port.server.config.get("tiny_port_mapper")
        self.applied = True
        return self

    def get_app_command(self, db: Session, port: Port):
        if remote_address := port.forward_rule.config.get("remote_address"):
            remote_ip = dns_query(remote_address)
            port.forward_rule.config['remote_ip'] = remote_ip
            db.add(port.forward_rule)
            db.commit()
        if is_ipv6(remote_ip):
            remote_ip = f"[{remote_ip}]"
        relay_type = port.forward_rule.config.get('type')
        args = (
            f"--log-level 3 "
            f"--disable-color "
            f"-l [::]:{port.num} "
            f"-r {remote_ip}:{port.forward_rule.config.get('remote_port')} "
            f"{'-t ' if relay_type == 'ALL' or relay_type == 'TCP' else ''}"
            f"{'-u ' if relay_type == 'ALL' or relay_type == 'UDP' else ''}")
        return f"/usr/local/bin/tiny_port_mapper {args}"
Ejemplo n.º 3
0
def dns_query(hostname: str) -> Optional[str]:
    hostname = hostname.strip()
    if not hostname:
        return None
    elif is_ip(hostname) or is_ipv6(hostname):
        return hostname

    if result := get_ipv4(hostname):
        return result
Ejemplo n.º 4
0
 def get_app_command(self, db: Session, port: Port):
     remote_port = port.forward_rule.config.get('remote_port')
     remote_address = port.forward_rule.config.get('remote_address')
     if is_ipv6(remote_address):
         remote_address = f"[{remote_address}]"
     args = (f"-l [::]:{port.num} "
             f"-uzr {remote_address}:{remote_port} "
             f"-f "
             f"--tcp-timeout 0 "
             f"--udp-timeout 120")
     return f"/usr/local/bin/realm {args}"
Ejemplo n.º 5
0
 def get_app_command(self, port: Port):
     transport_type = port.forward_rule.config.get("transport_type", "raw")
     remote_port = port.forward_rule.config.get('remote_port')
     remote_address = port.forward_rule.config.get('remote_address')
     if is_ipv6(remote_address):
         remote_address = f"[{remote_address}]"
     args = (
         f"-l :{port.num} "
         f"--lt {port.forward_rule.config.get('listen_type', 'raw')} "
         f"-r {'wss://' if transport_type.endswith('wss') else ('ws://' if transport_type != 'raw' else '')}"
         f"{remote_address}:{remote_port} "
         f"-ur {'wss://' if transport_type.endswith('wss') else ('ws://' if transport_type != 'raw' else '')}"
         f"{remote_address}:{remote_port} "
         f"--tt {transport_type}")
     return f"/usr/local/bin/ehco {args}"
Ejemplo n.º 6
0
 def get_app_command(self, port: Port):
     remote_port = port.forward_rule.config.get('remote_port')
     remote_address = port.forward_rule.config.get('remote_address')
     if is_ipv6(remote_address):
         remote_address = f"[{remote_address}]"
     relay_type = port.forward_rule.config.get('type')
     args = []
     if relay_type in ("ALL", "TCP"):
         args.append(
             f"socat TCP6-LISTEN:{port.num},fork,reuseaddr TCP:{remote_address}:{remote_port}"
         )
     if relay_type in ("ALL", "UDP"):
         args.append(
             f"socat -T 120 UDP6-LISTEN:{port.num},fork,reuseaddr UDP:{remote_address}:{remote_port}"
         )
     args = " & ".join(args)
     return f'/bin/sh -c \\"{args}\\"'
Ejemplo n.º 7
0
def check_ip(ip: str) -> str:
    if not (is_ip(ip) or is_ipv6(ip)):
        raise ValueError(f"Invalid ip: {ip}")
    return ip