示例#1
0
    def connect_ok(self):
        # 可能目标主机不可达到
        try:
            n = utils.ip4s_2_number(self.getpeername()[0])
        except OSError:
            self.delete_handler(self.fileno)
            return

        self.__conn_time = time.time()
        self.print_access_log("connect_ok")

        if fngw_config.configs["udp_global"]:
            self.__traffic_fetch_fd = self.create_handler(
                self.fileno, traffic_pass.traffic_read)
            subnet, prefix = fngw_config.configs["udp_proxy_subnet"]
            subnet = utils.ip4b_2_number(socket.inet_aton(subnet))

            fdsl_ctl.set_udp_proxy_subnet(self.__traffic_fetch_fd, subnet,
                                          chr(int(prefix)).encode())
            fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)
        self.set_timeout(self.fileno, self.__LOOP_TIMEOUT)
        self.register(self.fileno)
        self.add_evt_read(self.fileno)

        while 1:
            try:
                is_dns, msg = self.__wait_sent.pop(0)
            except IndexError:
                break
            if is_dns:
                self.__send_dns(msg)
            else:
                self.__send_data(msg)
            continue
        return
示例#2
0
    def handler_ctl(self, from_fd, cmd, filter_dev=None):
        if cmd not in (
                "tunnel_close", "tunnel_open", "set_filter_dev_fd", "as_tunnel_fd",): return False
        if cmd == "tunnel_close": self.__tunnel_is_open = False
        if cmd == "tunnel_open": self.__tunnel_is_open = True

        if cmd == "set_filter_dev_fd":
            self.__dev_fd = filter_dev
            if not self.__is_first: return
            self.__blacklist_ips = self.__get_blacklist_cache()
            self.__is_first = False
            for ip in self.__blacklist_ips: fdsl_ctl.tf_record_add(self.__dev_fd, utils.ip4s_2_number(ip))
        if cmd == "as_tunnel_fd": self.__tunnel_fd = from_fd
        return
示例#3
0
    def __handle_auth_ok(self, session_id):
        self.__traffic_fetch_fd = self.create_handler(self.fileno, traffic_pass.traffic_read)
        n = utils.ip4s_2_number(self.__server_ipaddr)
        fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)

        self.__is_auth = True
        self.dispatcher.ctunnel_ok()

        self.ctl_handler(self.fileno, self.__dns_fd, "as_tunnel_fd")
        self.ctl_handler(self.fileno, self.__dns_fd, "tunnel_open")
        self.ctl_handler(self.fileno, self.__dns_fd, "set_filter_dev_fd", self.__traffic_fetch_fd)

        self.set_timeout(self.fileno, self.__TIMEOUT)
        return
示例#4
0
    def __init(self):
        if not fngw_config.configs["udp_global"]: return
        self.__traffic_fetch_fd = self.create_handler(
            self.fileno, traffic_pass.traffic_read)
        n = utils.ip4s_2_number(self.__server_ipaddr)

        subnet, prefix = fngw_config.configs["udp_proxy_subnet"]
        subnet = utils.ip4b_2_number(socket.inet_aton(subnet))

        fdsl_ctl.set_udp_proxy_subnet(self.__traffic_fetch_fd, subnet,
                                      chr(int(prefix)).encode())
        fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)

        return
示例#5
0
    def __handle_auth_ok(self):
        self.__auth_ok = True
        self.print_access_log("auth_ok")
        self.__traffic_fetch_fd = self.create_handler(self.fileno, traffic_pass.traffic_read)
        self.set_timeout(self.fileno, self.__TIMEOUT)

        n = utils.ip4s_2_number(self.getpeername()[0])
        fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)

        self.dispatcher.ctunnel_ok()

        self.ctl_handler(self.fileno, self.__dns_fd, "as_tunnel_fd")
        self.ctl_handler(self.fileno, self.__dns_fd, "tunnel_open")
        self.ctl_handler(self.fileno, self.__dns_fd, "set_filter_dev_fd", self.__traffic_fetch_fd)
        self.set_timeout(self.fileno, self.__TIMEOUT)
示例#6
0
    def __handle_auth_ok(self):
        self.__auth_ok = True
        self.print_access_log("auth_ok")
        self.__traffic_fetch_fd = self.create_handler(self.fileno, traffic_pass.traffic_read)
        self.set_timeout(self.fileno, self.__TIMEOUT)

        n = utils.ip4s_2_number(self.getpeername()[0])
        fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)

        self.dispatcher.ctunnel_ok()

        self.ctl_handler(self.fileno, self.__dns_fd, "as_tunnel_fd")
        self.ctl_handler(self.fileno, self.__dns_fd, "tunnel_open")
        self.ctl_handler(self.fileno, self.__dns_fd, "set_filter_dev_fd", self.__traffic_fetch_fd)
        self.set_timeout(self.fileno, self.__TIMEOUT)
示例#7
0
 def message_from_handler(self, from_fd, byte_data):
     dns_id = byte_data[0] << 8 | byte_data[1]
     if dns_id not in self.__dns_flags: return
     if not self.__dns_flags[dns_id] or not self.__tunnel_is_open:
         self.__send_to_client(byte_data)
         return
     msg = dns.message.from_wire(byte_data)
     for rrset in msg.answer:
         for cname in rrset:
             ip = cname.__str__()
             if not self.__check_ipaddr(ip): continue
             if ip not in self.__blacklist_ips:
                 self.__blacklist_ips[ip] = None
             fdsl_ctl.tf_record_add(self.__dev_fd, utils.ip4s_2_number(ip))
             ''''''
     self.__send_to_client(byte_data)
示例#8
0
    def __handle_auth_ok(self, session_id):
        self.__traffic_fetch_fd = self.create_handler(
            self.fileno, traffic_pass.traffic_read)
        n = utils.ip4s_2_number(self.__server_ipaddr)
        fdsl_ctl.set_tunnel(self.__traffic_fetch_fd, n)

        self.__is_auth = True
        self.dispatcher.ctunnel_ok()

        self.ctl_handler(self.fileno, self.__dns_fd, "as_tunnel_fd")
        self.ctl_handler(self.fileno, self.__dns_fd, "tunnel_open")
        self.ctl_handler(self.fileno, self.__dns_fd, "set_filter_dev_fd",
                         self.__traffic_fetch_fd)

        self.set_timeout(self.fileno, self.__TIMEOUT)
        return