From 9b7d31b0147563c17a408d9931cf3388502710d8 Mon Sep 17 00:00:00 2001 From: Micheal X Date: Tue, 1 Aug 2023 15:02:38 +1200 Subject: [PATCH] 5.5.0 Improve performance. --- code/default/launcher/non_tray.py | 2 +- code/default/launcher/start.py | 2 +- code/default/launcher/web_control.py | 2 + .../lib/noarch/front_base/boringssl_wrap.py | 1 + .../default/lib/noarch/front_base/check_ip.py | 3 +- .../lib/noarch/front_base/connect_manager.py | 10 +- code/default/lib/noarch/front_base/http1.py | 11 +- .../lib/noarch/front_base/http2_connection.py | 17 +- .../lib/noarch/front_base/http2_stream.py | 37 +- .../lib/noarch/front_base/http_common.py | 66 ++- .../lib/noarch/front_base/http_dispatcher.py | 38 +- .../lib/noarch/front_base/ip_manager.py | 2 +- code/default/lib/noarch/utils.py | 4 +- code/default/lib/tests/test_queue.py | 3 +- .../smart_router/local/cn_ipv4_range.txt | 525 +++++++++++------- .../smart_router/local/connect_manager.py | 20 +- code/default/smart_router/local/dns_query.py | 21 +- .../smart_router/local/gfw_white_list.txt | 66 ++- code/default/smart_router/local/gfwlist.py | 108 +++- code/default/smart_router/local/ip_region.py | 16 +- .../default/smart_router/local/smart_route.py | 15 +- code/default/version.txt | 2 +- code/default/x_tunnel/local/base_container.py | 201 ++++--- code/default/x_tunnel/local/client.py | 3 +- .../x_tunnel/local/cloudflare_front/config.py | 2 +- .../local/cloudflare_front/ip_manager.py | 7 +- .../x_tunnel/local/front_dispatcher.py | 6 +- code/default/x_tunnel/local/proxy_session.py | 67 ++- .../x_tunnel/local/tls_relay_front/config.py | 1 + code/default/x_tunnel/local/upload_logs.py | 4 +- code/default/x_tunnel/local/web_control.py | 1 - 31 files changed, 841 insertions(+), 422 deletions(-) diff --git a/code/default/launcher/non_tray.py b/code/default/launcher/non_tray.py index 223439a2c4..766b0feafb 100644 --- a/code/default/launcher/non_tray.py +++ b/code/default/launcher/non_tray.py @@ -20,7 +20,7 @@ def on_quit(self, widget=None, data=None): def serve_forever(self): while global_var.running: - time.sleep(1) + time.sleep(10) sys_tray = None_tray() diff --git a/code/default/launcher/start.py b/code/default/launcher/start.py index c9ed678281..4b80911627 100644 --- a/code/default/launcher/start.py +++ b/code/default/launcher/start.py @@ -170,7 +170,7 @@ def main(): sys_platform.show_systray() else: while global_var.running: - time.sleep(1) + time.sleep(10) try: diff --git a/code/default/launcher/web_control.py b/code/default/launcher/web_control.py index 957c99c746..de011ee58d 100644 --- a/code/default/launcher/web_control.py +++ b/code/default/launcher/web_control.py @@ -873,6 +873,8 @@ def req_debug_handler(self): continue dat += "%s => %d\n\n" % (path, n) + dat += "thread num:%d
" % threading.active_count() + self.send_response("text/plain", dat) except Exception as e: xlog.exception("debug:%r", e) diff --git a/code/default/lib/noarch/front_base/boringssl_wrap.py b/code/default/lib/noarch/front_base/boringssl_wrap.py index 37114626d2..66f1ae43d7 100644 --- a/code/default/lib/noarch/front_base/boringssl_wrap.py +++ b/code/default/lib/noarch/front_base/boringssl_wrap.py @@ -186,6 +186,7 @@ def send(self, data, flags=0): self.select2.select(timeout=self.timeout) continue else: + # self._context.logger.debug("send:%d ip:%s", ret, self.ip_str) break return ret diff --git a/code/default/lib/noarch/front_base/check_ip.py b/code/default/lib/noarch/front_base/check_ip.py index 2db34a13ac..63746c31ec 100644 --- a/code/default/lib/noarch/front_base/check_ip.py +++ b/code/default/lib/noarch/front_base/check_ip.py @@ -62,7 +62,8 @@ def check_ip(self, ip, sni=None, host=None, wait_time=0, path=None, headers={}): host = ssl_sock.host self.logger.info("host:%s", host) - time.sleep(wait_time) + if wait_time: + time.sleep(wait_time) start_time = time.time() if not ssl_sock.h2: diff --git a/code/default/lib/noarch/front_base/connect_manager.py b/code/default/lib/noarch/front_base/connect_manager.py index 3b98e661fc..8122d4d2ee 100644 --- a/code/default/lib/noarch/front_base/connect_manager.py +++ b/code/default/lib/noarch/front_base/connect_manager.py @@ -191,7 +191,7 @@ def set_ssl_created_cb(self, cb): def keep_alive_thread(self): while self.running: - to_keep_live_list = self.new_conn_pool.get_need_keep_alive(maxtime=self.config.https_keep_alive-3) + to_keep_live_list = self.new_conn_pool.get_need_keep_alive(maxtime=self.config.https_keep_alive-6) for ssl_sock in to_keep_live_list: inactive_time = time.time() - ssl_sock.last_use_time @@ -207,7 +207,7 @@ def keep_alive_thread(self): # no appid avaiable pass - time.sleep(1) + time.sleep(5) def keep_connection_daemon(self): while self.running: @@ -243,7 +243,9 @@ def _create_more_connection_worker(self): self.connecting_more_thread = None def _connect_thread(self, sleep_time=0): - time.sleep(sleep_time) + if sleep_time > 0.1: + time.sleep(sleep_time) + try: while self.running and self._need_more_ip(): if self.new_conn_pool.qsize() > self.config.https_connection_pool_max: @@ -272,7 +274,7 @@ def _connect_process(self): self.new_conn_pool.put((ssl_sock.handshake_time, ssl_sock)) - if self.config.connect_create_interval > 0: + if self.config.connect_create_interval > 0.1: sleep = random.uniform(self.config.connect_create_interval, self.config.connect_create_interval*2) time.sleep(sleep) diff --git a/code/default/lib/noarch/front_base/http1.py b/code/default/lib/noarch/front_base/http1.py index 0a533b8f0c..471c892815 100644 --- a/code/default/lib/noarch/front_base/http1.py +++ b/code/default/lib/noarch/front_base/http1.py @@ -70,20 +70,20 @@ def keep_alive_thread(self): if not self.keep_running: self.close("exit ") return - time.sleep(1) + time.sleep(3) if self.config.http1_first_ping_wait and self.processed_tasks == 0: self.task_queue.put("ping") if self.config.http1_ping_interval: while self.keep_running: - time_to_ping = max(self.config.http1_ping_interval - (time.time() - self.last_recv_time), 0.2) + time_to_ping = max(self.config.http1_ping_interval - (time.time() - self.last_recv_time), 3) time.sleep(time_to_ping) if not self.request_onway and \ - time.time() - self.last_recv_time > self.config.http1_ping_interval - 1: + time.time() - self.last_recv_time > self.config.http1_ping_interval - 3: self.task_queue.put("ping") - time.sleep(1) + time.sleep(3) elif self.config.http1_idle_time: while self.keep_running: @@ -259,7 +259,8 @@ def head_request(self): content = response.readall(timeout=5) self.record_active("head end") - self.rtt = (time.time() - start_time) * 1000 + rtt = (time.time() - start_time) * 1000 + self.update_rtt(rtt) return True except Exception as e: self.logger.warn("h1 %s HEAD keep alive request fail:%r", self.ssl_sock.ip_str, e) diff --git a/code/default/lib/noarch/front_base/http2_connection.py b/code/default/lib/noarch/front_base/http2_connection.py index 6ee0ab3db2..3361007ad7 100644 --- a/code/default/lib/noarch/front_base/http2_connection.py +++ b/code/default/lib/noarch/front_base/http2_connection.py @@ -193,7 +193,7 @@ def send_loop(self): continue # wait for payload frame - time.sleep(0.01) + # time.sleep(0.01) # combine header and payload in one tcp package. if not self.send_queue._qsize(): self._sock.flush() @@ -429,7 +429,7 @@ def receive_frame(self, frame): rtt = (time_now - ping_time) * 1000 if rtt < 0: self.logger.error("rtt:%f ping_time:%f now:%f", rtt, ping_time, time_now) - self.rtt = rtt + self.update_rtt(rtt) self.ping_on_way -= 1 #self.logger.debug("RTT:%d, on_way:%d", self.rtt, self.ping_on_way) if self.keep_running and self.ping_on_way == 0: @@ -525,10 +525,11 @@ def check_active(self, now): if not self.keep_running: return - if len(self.streams) == 0: - if self.is_life_end(): - return self.close("life end") + if len(self.streams): + return + + if self.is_life_end(): + return self.close("life end") - if now - self.last_send_time > self.config.http2_idle_ping_min_interval: - self.send_ping() - return + if now - self.last_send_time > self.config.http2_idle_ping_min_interval: + self.send_ping() diff --git a/code/default/lib/noarch/front_base/http2_stream.py b/code/default/lib/noarch/front_base/http2_stream.py index 2f583a7c98..9859d168eb 100644 --- a/code/default/lib/noarch/front_base/http2_stream.py +++ b/code/default/lib/noarch/front_base/http2_stream.py @@ -319,26 +319,35 @@ def receive_frame(self, frame): whole_cost = time_now - self.start_time receive_cost = time_now - self.get_head_time bytes_received = self.connection._sock.bytes_received - self.start_connection_point - if receive_cost > 0 and bytes_received > 10000 and not self.task.finished and receive_cost > 0.001: - # speed = bytes_received / receive_cost - speed = (len(self.request_body) + bytes_received) / (whole_cost - xcost) + if receive_cost > 0 and bytes_received > 10000 and not self.task.finished and receive_cost > 0.001 \ + and xcost >= 0: + rtt = whole_cost - xcost + t_road = rtt + if t_road <= self.connection.handshake: + # adjust handshake + self.connection.handshake = t_road + else: + t_road -= self.connection.handshake + + speed = (len(self.request_body) + bytes_received) / t_road self.connection.update_speed(speed) self.task.set_state("h2_finish[SP:%d]" % speed) send_cost = len(self.request_body) / speed streams_cost = ((self.connection.max_payload /2) * self.get_head_stream_num) / speed - if xcost >= 0: - rtt = whole_cost - xcost - send_cost - receive_cost # - streams_cost - if self.config.http2_show_debug: - self.logger.debug("%s RTT:%f rtt:%f send_len:%d recv_len:%d " - "whole_Cost:%f xcost:%f rcost:%f send_cost:%f recv_cost:%f " - "streams_cost:%f Speed: %f", - self.connection.ssl_sock.ip_str, - self.connection.rtt * 1000, rtt * 1000, - len(self.request_body), bytes_received, - whole_cost, xcost, rcost, send_cost, receive_cost, streams_cost, speed) - self.connection.update_rtt(rtt) + if self.config.http2_show_debug: + self.logger.debug("%s RTT:%f rtt:%f send_len:%d recv_len:%d " + "whole_Cost:%f xcost:%f rcost:%f send_cost:%f recv_cost:%f " + "streams_cost:%f Speed: %f", + self.connection.ssl_sock.ip_str, + self.connection.rtt * 1000, rtt * 1000, + len(self.request_body), bytes_received, + whole_cost, xcost, rcost, send_cost, receive_cost, streams_cost, speed) + self.connection.update_rtt(rtt, self.task.predict_rtt) + self.logger.debug("%s handshake:%f stream:%d up:%d down:%d rtt:%f", self.connection.ip_str, + self.connection.handshake, + len(self.connection.streams), len(self.request_body), bytes_received, rtt) self._close_remote() diff --git a/code/default/lib/noarch/front_base/http_common.py b/code/default/lib/noarch/front_base/http_common.py index 1ab4628a8c..f00a39a85c 100644 --- a/code/default/lib/noarch/front_base/http_common.py +++ b/code/default/lib/noarch/front_base/http_common.py @@ -1,7 +1,7 @@ import time import random -import simple_queue +from queue import Queue import simple_http_client @@ -20,7 +20,8 @@ def __init__(self, logger, config, method, host, path, headers, body, queue, url self.start_time = time.time() self.unique_id = "%s:%f" % (url, self.start_time) self.trace_time = [] - self.body_queue = simple_queue.Queue() + self.body_queue = Queue() + self.predict_rtt = 0.5 self.body_len = 0 self.body_readed = 0 self.content_length = None @@ -56,7 +57,11 @@ def read(self, size=None): if size: while self.read_buffer_len < size: - data = self.body_queue.get(self.timeout) + try: + data = self.body_queue.get(timeout=self.timeout) + except: + data = None + if not data: return b'' @@ -94,7 +99,11 @@ def read(self, size=None): data = self.read_buffers.pop(0) self.read_buffer_len -= len(data) else: - data = self.body_queue.get(self.timeout) + try: + data = self.body_queue.get(timeout=self.timeout) + except: + data = None + if not data: return b'' @@ -186,8 +195,9 @@ def __init__(self, logger, ip_manager, config, ssl_sock, close_cb, retry_task_cb self.ip_manager = ip_manager self.config = config self.ssl_sock = ssl_sock + self.handshake = ssl_sock.handshake_time * 0.001 self.rtt = ssl_sock.handshake_time * 0.001 - self.speed = 5000000 + self.speed = 15000000 self.ip_str = ssl_sock.ip_str self.close_cb = close_cb self.retry_task_cb = retry_task_cb @@ -198,6 +208,7 @@ def __init__(self, logger, ip_manager, config, ssl_sock, close_cb, retry_task_cb self.processed_tasks = 0 self.continue_fail_tasks = 0 self.rtt_history = [self.rtt,] + self.adjust_history = [] self.speed_history = [self.speed, self.speed, self.speed] self.last_recv_time = self.ssl_sock.create_time self.last_send_time = self.ssl_sock.create_time @@ -210,8 +221,10 @@ def __str__(self): o += " running: %s\r\n" % (self.keep_running) o += " processed_tasks: %d\r\n" % (self.processed_tasks) o += " continue_fail_tasks: %s\r\n" % (self.continue_fail_tasks) + o += " handshake: %f \r\n" % self.handshake o += " rtt_history: %s\r\n" % (self.rtt_history) o += " speed_history: %s\r\n" % (self.speed_history) + o += " adjust_history: %s\r\n" % (self.adjust_history) if self.version != "1.1": o += "streams: %d\r\n" % len(self.streams) o += " rtt: %f\r\n" % (self.rtt) @@ -219,12 +232,18 @@ def __str__(self): o += " score: %f\r\n" % (self.get_score()) return o - def update_rtt(self, rtt): + def update_rtt(self, rtt, predict_rtt=None): self.rtt_history.append(rtt) if len(self.rtt_history) > 10: self.rtt_history.pop(0) # self.rtt = sum(self.rtt_history) / len(self.rtt_history) + if predict_rtt: + adjust = rtt - predict_rtt + self.adjust_history.append(adjust) + if len(self.adjust_history) > 10: + self.adjust_history.pop(0) + def update_speed(self, speed): self.speed_history.append(speed) if len(self.speed_history) > 10: @@ -240,7 +259,8 @@ def update_debug_data(self, rtt, sent, received, speed): # else: # self.rtt = rtt - self.log_debug_data(rtt, sent, received) + # self.log_debug_data(rtt, sent, received) + return def close(self, reason): if not self.keep_running: @@ -261,19 +281,27 @@ def close(self, reason): def get_score(self): # The smaller, the better - score = self.rtt - if self.version != "1.1": - response_body_len = self.max_payload - for _, stream in self.streams.items(): - if stream.response_body_len == 0: - response_body_len += self.max_payload - else: - response_body_len += stream.response_body_len - stream.task.body_len - score += response_body_len / self.speed + score = self.handshake + if self.processed_tasks == 0 and len(self.streams) == 0: + score /= 3 - if self.config.show_state_debug: - self.logger.debug("get_score %s, speed:%f rtt:%d stream_num:%d score:%f", self.ip_str, - self.speed * 0.000001, self.rtt * 1000, len(self.streams), score) + if self.version == "1.1": + score += self.max_payload / self.speed + return score + + response_body_len = self.max_payload + for _, stream in self.streams.items(): + if stream.response_body_len == 0: + response_body_len += self.max_payload + else: + response_body_len += stream.response_body_len - stream.task.body_len + score += response_body_len / self.speed + + score += len(self.streams) * 0.06 + + if self.config.show_state_debug: + self.logger.debug("get_score %s, speed:%f rtt:%d stream_num:%d score:%f", self.ip_str, + self.speed * 0.000001, self.rtt * 1000, len(self.streams), score) return score diff --git a/code/default/lib/noarch/front_base/http_dispatcher.py b/code/default/lib/noarch/front_base/http_dispatcher.py index 26d1994bf7..262c25797a 100644 --- a/code/default/lib/noarch/front_base/http_dispatcher.py +++ b/code/default/lib/noarch/front_base/http_dispatcher.py @@ -24,7 +24,7 @@ import traceback from utils import SimpleCondition -import simple_queue +from queue import Queue import utils from . import http_common @@ -62,7 +62,7 @@ def __init__(self, logger, config, ip_manager, connection_manager, else: self.http2stream_class = Stream - self.request_queue = queue.Queue() + self.request_queue = Queue() self.workers = [] self.working_tasks = {} self.h1_num = 0 @@ -97,7 +97,7 @@ def __init__(self, logger, config, ip_manager, connection_manager, } self.trigger_create_worker_cv = SimpleCondition() - self.wait_a_worker_cv = simple_queue.Queue() + self.wait_a_worker_cv = SimpleCondition() threading.Thread(target=self.dispatcher).start() threading.Thread(target=self.create_worker_thread).start() @@ -257,7 +257,7 @@ def get_worker(self, nowait=False): return best_worker self._debug_log("wait a new worker") - self.wait_a_worker_cv.wait(time.time() + 1) + self.wait_a_worker_cv.wait(1) def _remove_slowest_worker(self): # close slowest worker, @@ -314,12 +314,16 @@ def request(self, method, host, path, headers, body, url=b"", timeout=60): self._debug_log("task start request %s" % url) self.last_request_time = time.time() - q = simple_queue.Queue() + q = Queue() task = http_common.Task(self.logger, self.config, method, host, path, headers, body, q, url, timeout) task.set_state("start_request") self.request_queue.put(task) - response = q.get(timeout=timeout) + try: + response = q.get(timeout=timeout) + except: + response = None + if response and response.status == 200: self.success_num += 1 self.continue_fail_num = 0 @@ -330,7 +334,7 @@ def request(self, method, host, path, headers, body, url=b"", timeout=60): self.continue_fail_num += 1 self.last_fail_time = time.time() if task.worker: - task.worker.rtt = (time.time() - task.worker.last_recv_time) * 1000 + # task.worker.rtt = (time.time() - task.worker.last_recv_time) * 1000 task.worker.continue_fail_tasks += 1 if task.worker.continue_fail_tasks > self.config.dispather_worker_max_continue_fail: @@ -380,13 +384,14 @@ def dispatcher(self): while self.running: start_time = time.time() try: - task = self.request_queue.get(True) - if task is None: - # exit - break - except Exception as e: - self.logger.exception("http_dispatcher dispatcher request_queue.get fail:%r", e) - continue + task = self.request_queue.get() + except: + task = None + + if task is None: + # exit + break + get_time = time.time() get_cost = get_time - start_time @@ -408,6 +413,7 @@ def dispatcher(self): get_cost = get_worker_time - get_time task.set_state("get_worker(%d):%s" % (get_cost, worker.ip_str)) task.worker = worker + task.predict_rtt = worker.get_score() try: worker.request(task) except Exception as e: @@ -429,7 +435,7 @@ def connection_checker(self): except Exception as e: self.logger.exception("check worker except:%r", e) - time.sleep(1) + time.sleep(5) def is_idle(self): return time.time() - self.last_request_time > self.idle_time @@ -488,7 +494,7 @@ def statistic(self): "sent": self.total_sent - self.last_sent, "received": self.total_received - self.last_received } - self.rtts = [] + # self.rtts = [] self.last_sent = self.total_sent self.last_received = self.total_received self.second_stats.append(self.second_stat) diff --git a/code/default/lib/noarch/front_base/ip_manager.py b/code/default/lib/noarch/front_base/ip_manager.py index 49924695c9..8f4ccf83d0 100644 --- a/code/default/lib/noarch/front_base/ip_manager.py +++ b/code/default/lib/noarch/front_base/ip_manager.py @@ -363,7 +363,7 @@ def get_ip_sni_host(self, to_recheck=False): ip_num = len(self.ip_list) if ip_num == 0: # self.logger.warning("no ip") - time.sleep(1) + time.sleep(5) return None, None, None ip_connect_interval = ip_num * self.scan_recheck_interval + 200 if to_recheck else self.ip_connect_interval diff --git a/code/default/lib/noarch/utils.py b/code/default/lib/noarch/utils.py index a51c3d7838..efa7ba29b5 100644 --- a/code/default/lib/noarch/utils.py +++ b/code/default/lib/noarch/utils.py @@ -186,9 +186,9 @@ def notify(self): self.lock.notify() self.lock.release() - def wait(self): + def wait(self, timeout=None): self.lock.acquire() - self.lock.wait() + self.lock.wait(timeout) self.lock.release() diff --git a/code/default/lib/tests/test_queue.py b/code/default/lib/tests/test_queue.py index 4ce4eece0a..8012ac9edb 100644 --- a/code/default/lib/tests/test_queue.py +++ b/code/default/lib/tests/test_queue.py @@ -1,7 +1,8 @@ import time import threading from unittest import TestCase -from simple_queue import Queue +# from simple_queue import Queue +from queue import Queue class TestSimpleQueue(TestCase): diff --git a/code/default/smart_router/local/cn_ipv4_range.txt b/code/default/smart_router/local/cn_ipv4_range.txt index 3f91ff5d7f..0dfd53992e 100644 --- a/code/default/smart_router/local/cn_ipv4_range.txt +++ b/code/default/smart_router/local/cn_ipv4_range.txt @@ -264,6 +264,11 @@ 42.242.0.0 131072 42.244.0.0 262144 42.248.0.0 524288 +43.136.0.0 524288 +43.144.0.0 524288 +43.176.0.0 1048576 +43.192.0.0 262144 +43.196.0.0 131072 43.224.12.0 1024 43.224.24.0 1024 43.224.44.0 1024 @@ -287,8 +292,6 @@ 43.225.76.0 1024 43.225.84.0 1024 43.225.120.0 1024 -43.225.124.0 1024 -43.225.140.0 1024 43.225.172.0 1024 43.225.180.0 1024 43.225.208.0 1024 @@ -423,11 +426,12 @@ 43.228.148.0 1024 43.228.152.0 1024 43.228.188.0 1024 +43.228.204.0 1024 +43.228.240.0 1024 43.229.40.0 1024 43.229.48.0 1024 43.229.56.0 1024 43.229.96.0 1024 -43.229.120.0 1024 43.229.136.0 1024 43.229.140.0 1024 43.229.144.0 1024 @@ -596,7 +600,6 @@ 43.237.184.0 1024 43.237.188.0 1024 43.237.192.0 1024 -43.237.196.0 1024 43.237.200.0 1024 43.237.204.0 1024 43.237.208.0 1024 @@ -720,7 +723,6 @@ 43.240.212.0 1024 43.240.216.0 1024 43.240.220.0 1024 -43.240.236.0 1024 43.240.240.0 1024 43.240.244.0 1024 43.240.248.0 1024 @@ -743,7 +745,6 @@ 43.241.176.0 1024 43.241.180.0 1024 43.241.184.0 1024 -43.241.196.0 1024 43.241.208.0 1024 43.241.212.0 1024 43.241.216.0 1024 @@ -757,8 +758,7 @@ 43.241.252.0 1024 43.242.8.0 1024 43.242.12.0 1024 -43.242.16.0 1024 -43.242.20.0 1024 +43.242.16.0 2048 43.242.24.0 1024 43.242.28.0 1024 43.242.44.0 1024 @@ -793,7 +793,6 @@ 43.243.8.0 1024 43.243.12.0 1024 43.243.16.0 1024 -43.243.24.0 1024 43.243.88.0 1024 43.243.128.0 1024 43.243.136.0 1024 @@ -801,7 +800,6 @@ 43.243.148.0 1024 43.243.156.0 1024 43.243.180.0 1024 -43.243.188.0 1024 43.243.228.0 1024 43.243.232.0 1024 43.243.244.0 1024 @@ -831,7 +829,6 @@ 43.246.92.0 1024 43.246.96.0 1024 43.246.112.0 1024 -43.246.212.0 1024 43.246.228.0 1024 43.247.4.0 1024 43.247.8.0 1024 @@ -953,10 +950,8 @@ 43.251.232.0 1024 43.251.236.0 1024 43.251.244.0 1024 -43.252.40.0 1024 43.252.48.0 1024 43.252.56.0 1024 -43.252.224.0 1024 43.254.0.0 1024 43.254.4.0 1024 43.254.8.0 1024 @@ -1008,9 +1003,7 @@ 43.255.76.0 1024 43.255.84.0 1024 43.255.96.0 1024 -43.255.108.0 1024 43.255.144.0 1024 -43.255.168.0 1024 43.255.176.0 1024 43.255.184.0 1024 43.255.192.0 1024 @@ -1059,13 +1052,10 @@ 45.113.240.0 1024 45.113.252.0 1024 45.114.0.0 1024 -45.114.12.0 1024 45.114.32.0 1024 45.114.40.0 1024 45.114.52.0 1024 45.114.96.0 1024 -45.114.104.0 1024 -45.114.108.0 1024 45.114.124.0 1024 45.114.136.0 1024 45.114.196.0 1024 @@ -1111,9 +1101,7 @@ 45.120.100.0 1024 45.120.140.0 1024 45.120.164.0 1024 -45.120.220.0 1024 45.120.240.0 1024 -45.121.20.0 1024 45.121.52.0 1024 45.121.64.0 1024 45.121.68.0 1024 @@ -1220,11 +1208,8 @@ 45.124.176.0 1024 45.124.208.0 1024 45.124.248.0 1024 -45.125.12.0 1024 45.125.16.0 1024 45.125.24.0 1024 -45.125.28.0 1024 -45.125.32.0 1024 45.125.44.0 1024 45.125.52.0 1024 45.125.56.0 1024 @@ -1235,7 +1220,6 @@ 45.125.92.0 1024 45.125.96.0 1024 45.125.100.0 1024 -45.125.104.0 1024 45.125.136.0 1024 45.126.48.0 1024 45.126.52.0 1024 @@ -1248,9 +1232,6 @@ 45.126.220.0 1024 45.127.8.0 1024 45.127.12.0 1024 -45.127.96.0 1024 -45.127.116.0 1024 -45.127.124.0 1024 45.127.128.0 1024 45.127.144.0 1024 45.127.148.0 1024 @@ -1288,9 +1269,7 @@ 45.249.28.0 1024 45.249.32.0 1024 45.249.36.0 1024 -45.249.92.0 1024 45.249.112.0 1024 -45.249.180.0 1024 45.249.188.0 1024 45.249.192.0 1024 45.249.196.0 1024 @@ -1377,7 +1356,6 @@ 45.252.40.0 1024 45.252.44.0 1024 45.252.48.0 1024 -45.252.60.0 1024 45.252.84.0 1024 45.252.88.0 1024 45.252.92.0 1024 @@ -1472,8 +1450,6 @@ 45.253.236.0 1024 45.253.240.0 1024 45.253.244.0 1024 -45.253.248.0 1024 -45.253.252.0 1024 45.254.0.0 1024 45.254.4.0 1024 45.254.8.0 1024 @@ -1618,6 +1594,7 @@ 52.82.0.0 131072 52.130.0.0 131072 54.222.0.0 131072 +57.176.0.0 131072 58.14.0.0 131072 58.16.0.0 65536 58.17.0.0 32768 @@ -1715,7 +1692,6 @@ 59.153.116.0 1024 59.153.136.0 1024 59.153.152.0 1024 -59.153.156.0 1024 59.153.164.0 1024 59.153.168.0 1024 59.153.172.0 1024 @@ -1728,7 +1704,6 @@ 59.172.0.0 131072 59.174.0.0 131072 59.191.0.0 32768 -59.191.240.0 4096 59.192.0.0 4194304 60.0.0.0 524288 60.8.0.0 131072 @@ -1785,7 +1760,8 @@ 61.29.128.0 16384 61.29.192.0 8192 61.29.224.0 4096 -61.29.240.0 4096 +61.29.240.0 1024 +61.29.248.0 1024 61.45.128.0 16384 61.45.224.0 4096 61.47.128.0 16384 @@ -1889,7 +1865,6 @@ 101.38.0.0 131072 101.40.0.0 131072 101.42.0.0 131072 -101.44.0.0 262144 101.48.0.0 131072 101.50.8.0 1024 101.50.12.0 1024 @@ -1953,7 +1928,9 @@ 101.234.96.0 8192 101.236.0.0 262144 101.240.0.0 262144 -101.244.0.0 262144 +101.244.0.0 65536 +101.245.0.0 65536 +101.246.0.0 131072 101.248.0.0 131072 101.251.0.0 1024 101.251.8.0 2048 @@ -1972,6 +1949,7 @@ 103.2.108.0 1024 103.2.156.0 1024 103.2.164.0 1024 +103.2.188.0 512 103.2.200.0 1024 103.2.204.0 1024 103.2.208.0 1024 @@ -2009,7 +1987,6 @@ 103.6.108.0 1024 103.6.220.0 1024 103.6.228.0 1024 -103.7.4.0 1024 103.7.28.0 1024 103.7.140.0 1024 103.7.212.0 1024 @@ -2030,7 +2007,6 @@ 103.9.24.0 1024 103.9.108.0 1024 103.9.152.0 1024 -103.9.192.0 1024 103.9.248.0 1024 103.9.252.0 1024 103.10.0.0 1024 @@ -2043,6 +2019,7 @@ 103.12.32.0 1024 103.12.68.0 1024 103.12.92.0 1024 +103.12.98.0 512 103.12.136.0 1024 103.12.184.0 1024 103.12.232.0 1024 @@ -2052,7 +2029,6 @@ 103.13.196.0 1024 103.13.220.0 1024 103.13.244.0 1024 -103.14.32.0 1024 103.14.84.0 1024 103.14.100.0 1024 103.14.132.0 1024 @@ -2077,14 +2053,16 @@ 103.17.160.0 1024 103.17.204.0 1024 103.17.228.0 1024 +103.18.186.0 512 103.18.192.0 1024 +103.18.206.0 512 103.18.208.0 1024 103.18.212.0 1024 103.18.224.0 1024 -103.19.0.0 1024 103.19.12.0 1024 103.19.40.0 1024 103.19.44.0 1024 +103.19.50.0 512 103.19.64.0 1024 103.19.68.0 1024 103.19.72.0 1024 @@ -2152,7 +2130,6 @@ 103.24.184.0 1024 103.24.220.0 1024 103.24.228.0 1024 -103.24.248.0 1024 103.24.252.0 1024 103.25.8.0 512 103.25.20.0 1024 @@ -2190,11 +2167,16 @@ 103.28.204.0 1024 103.28.212.0 1024 103.29.16.0 1024 +103.29.24.0 512 +103.29.29.0 256 103.29.128.0 1024 103.29.132.0 1024 103.29.136.0 1024 +103.29.236.0 512 103.30.20.0 1024 103.30.96.0 1024 +103.30.104.0 512 +103.30.106.0 512 103.30.148.0 1024 103.30.200.0 1024 103.30.228.0 1024 @@ -2211,6 +2193,7 @@ 103.31.168.0 1024 103.31.200.0 1024 103.31.236.0 1024 +103.31.242.0 512 103.32.0.0 1024 103.32.4.0 1024 103.32.8.0 1024 @@ -2419,7 +2402,6 @@ 103.35.104.0 1024 103.35.116.0 1024 103.35.180.0 1024 -103.35.200.0 1024 103.35.220.0 1024 103.36.28.0 1024 103.36.36.0 1024 @@ -2452,7 +2434,6 @@ 103.36.236.0 1024 103.36.240.0 1024 103.36.244.0 1024 -103.37.0.0 1024 103.37.12.0 1024 103.37.16.0 1024 103.37.24.0 1024 @@ -2462,7 +2443,6 @@ 103.37.72.0 1024 103.37.100.0 1024 103.37.104.0 1024 -103.37.124.0 1024 103.37.136.0 1024 103.37.140.0 1024 103.37.144.0 1024 @@ -2476,8 +2456,7 @@ 103.37.188.0 1024 103.37.208.0 1024 103.37.212.0 1024 -103.37.216.0 1024 -103.37.220.0 1024 +103.37.216.0 2048 103.37.248.0 1024 103.37.252.0 1024 103.38.0.0 1024 @@ -2495,12 +2474,10 @@ 103.38.224.0 1024 103.38.228.0 1024 103.38.232.0 1024 -103.39.16.0 1024 103.39.64.0 1024 103.39.88.0 1024 103.39.100.0 1024 103.39.104.0 1024 -103.39.108.0 1024 103.39.160.0 1024 103.39.164.0 1024 103.39.168.0 1024 @@ -2529,6 +2506,7 @@ 103.40.44.0 1024 103.40.88.0 1024 103.40.100.0 1024 +103.40.158.0 512 103.40.192.0 1024 103.40.212.0 1024 103.40.220.0 1024 @@ -2542,6 +2520,7 @@ 103.41.0.0 1024 103.41.16.0 1024 103.41.52.0 1024 +103.41.116.0 1024 103.41.140.0 1024 103.41.148.0 1024 103.41.152.0 1024 @@ -2567,6 +2546,7 @@ 103.43.100.0 1024 103.43.104.0 1024 103.43.124.0 1024 +103.43.132.0 1024 103.43.184.0 1024 103.43.192.0 1024 103.43.196.0 1024 @@ -2576,7 +2556,6 @@ 103.43.240.0 1024 103.44.56.0 1024 103.44.80.0 1024 -103.44.88.0 1024 103.44.120.0 1024 103.44.124.0 1024 103.44.132.0 1024 @@ -2710,7 +2689,6 @@ 103.47.212.0 1024 103.48.52.0 1024 103.48.92.0 1024 -103.48.144.0 1024 103.48.148.0 1024 103.48.152.0 1024 103.48.156.0 1024 @@ -2727,7 +2705,6 @@ 103.49.20.0 1024 103.49.72.0 1024 103.49.76.0 1024 -103.49.92.0 1024 103.49.96.0 1024 103.49.108.0 1024 103.49.128.0 1024 @@ -2795,17 +2772,14 @@ 103.53.204.0 1024 103.53.208.0 1024 103.53.212.0 1024 -103.53.216.0 1024 103.53.236.0 1024 103.53.248.0 1024 103.54.8.0 1024 103.54.48.0 1024 -103.54.60.0 1024 103.54.160.0 1024 103.54.164.0 1024 103.54.212.0 1024 103.54.240.0 1024 -103.55.24.0 1024 103.55.80.0 1024 103.55.120.0 1024 103.55.152.0 1024 @@ -2822,6 +2796,9 @@ 103.56.60.0 1024 103.56.72.0 1024 103.56.76.0 1024 +103.56.94.0 512 +103.56.100.0 1024 +103.56.104.0 1024 103.56.140.0 1024 103.56.152.0 1024 103.56.184.0 1024 @@ -2842,6 +2819,7 @@ 103.59.128.0 1024 103.59.148.0 1024 103.59.164.0 1024 +103.59.168.0 512 103.60.32.0 1024 103.60.44.0 1024 103.60.164.0 1024 @@ -2855,7 +2833,6 @@ 103.61.160.0 1024 103.61.172.0 1024 103.61.176.0 1024 -103.61.184.0 1024 103.61.188.0 1024 103.62.24.0 1024 103.62.52.0 1024 @@ -3011,6 +2988,9 @@ 103.65.164.0 1024 103.65.168.0 1024 103.65.172.0 1024 +103.65.204.0 512 +103.65.206.0 512 +103.65.224.0 512 103.66.32.0 1024 103.66.40.0 1024 103.66.92.0 1024 @@ -3047,19 +3027,18 @@ 103.68.128.0 1024 103.68.192.0 1024 103.69.16.0 1024 +103.69.62.0 512 103.69.116.0 1024 103.69.132.0 1024 103.69.152.0 1024 -103.69.212.0 1024 103.70.8.0 1024 +103.70.14.0 512 103.70.148.0 1024 -103.70.184.0 1024 103.70.220.0 1024 103.70.224.0 1024 103.70.236.0 1024 103.70.252.0 1024 103.71.0.0 1024 -103.71.32.0 1024 103.71.48.0 1024 103.71.68.0 1024 103.71.72.0 1024 @@ -3090,7 +3069,6 @@ 103.72.124.0 1024 103.72.128.0 1024 103.72.132.0 1024 -103.72.144.0 1024 103.72.148.0 1024 103.72.172.0 1024 103.72.180.0 1024 @@ -3111,8 +3089,6 @@ 103.73.24.0 1024 103.73.28.0 1024 103.73.48.0 1024 -103.73.88.0 1024 -103.73.96.0 1024 103.73.116.0 1024 103.73.120.0 1024 103.73.128.0 1024 @@ -3143,7 +3119,6 @@ 103.74.156.0 1024 103.74.204.0 1024 103.74.232.0 1024 -103.75.16.0 1024 103.75.88.0 1024 103.75.92.0 1024 103.75.104.0 1024 @@ -3158,7 +3133,6 @@ 103.76.64.0 1024 103.76.68.0 1024 103.76.72.0 1024 -103.76.84.0 1024 103.76.92.0 1024 103.76.216.0 1024 103.76.220.0 1024 @@ -3202,8 +3176,8 @@ 103.79.204.0 1024 103.79.208.0 1024 103.79.212.0 1024 +103.79.228.0 512 103.79.240.0 1024 -103.80.24.0 1024 103.80.28.0 1024 103.80.44.0 1024 103.80.72.0 1024 @@ -3252,9 +3226,9 @@ 103.84.48.0 1024 103.84.64.0 1024 103.84.72.0 1024 -103.84.92.0 1024 -103.84.108.0 1024 103.84.136.0 1024 +103.84.170.0 512 +103.84.204.0 512 103.85.20.0 1024 103.85.24.0 1024 103.85.44.0 1024 @@ -3266,15 +3240,13 @@ 103.85.168.0 1024 103.85.172.0 1024 103.85.176.0 1024 +103.85.186.0 512 103.85.224.0 1024 103.86.28.0 1024 103.86.32.0 1024 -103.86.44.0 1024 103.86.60.0 1024 -103.86.68.0 1024 103.86.80.0 1024 103.86.84.0 1024 -103.86.88.0 1024 103.86.204.0 1024 103.86.208.0 1024 103.86.212.0 1024 @@ -3308,11 +3280,8 @@ 103.88.64.0 1024 103.88.72.0 1024 103.88.96.0 1024 -103.88.100.0 1024 103.88.164.0 1024 103.88.176.0 1024 -103.88.184.0 1024 -103.88.188.0 1024 103.88.212.0 1024 103.89.28.0 1024 103.89.96.0 1024 @@ -3355,12 +3324,13 @@ 103.91.36.0 1024 103.91.40.0 1024 103.91.108.0 1024 +103.91.112.0 512 +103.91.138.0 512 103.91.152.0 1024 103.91.176.0 1024 103.91.200.0 1024 103.91.208.0 1024 103.91.212.0 1024 -103.91.219.0 256 103.91.236.0 1024 103.91.252.0 1024 103.92.0.0 1024 @@ -3399,9 +3369,8 @@ 103.93.0.0 1024 103.93.4.0 1024 103.93.28.0 1024 -103.93.76.0 1024 103.93.84.0 1024 -103.93.121.0 256 +103.93.142.0 512 103.93.152.0 1024 103.93.180.0 1024 103.93.204.0 1024 @@ -3416,21 +3385,16 @@ 103.94.88.0 1024 103.94.116.0 1024 103.94.160.0 1024 -103.94.180.0 1024 103.94.200.0 1024 -103.95.28.0 1024 103.95.52.0 1024 -103.95.64.0 1024 103.95.68.0 1024 103.95.88.0 1024 103.95.92.0 1024 -103.95.116.0 1024 103.95.128.0 1024 103.95.136.0 1024 103.95.140.0 1024 103.95.144.0 1024 103.95.152.0 1024 -103.95.207.0 256 103.95.216.0 1024 103.95.220.0 1024 103.95.224.0 1024 @@ -3445,7 +3409,6 @@ 103.96.124.0 1024 103.96.136.0 1024 103.96.140.0 256 -103.96.148.0 1024 103.96.152.0 1024 103.96.156.0 1024 103.96.160.0 1024 @@ -3463,6 +3426,7 @@ 103.96.208.0 1024 103.96.212.0 1024 103.96.216.0 1024 +103.96.224.0 512 103.97.8.0 1024 103.97.12.0 1024 103.97.16.0 1024 @@ -3485,8 +3449,8 @@ 103.97.148.0 1024 103.97.188.0 1024 103.97.192.0 1024 -103.97.224.0 1024 103.97.228.0 512 +103.98.0.0 512 103.98.28.0 512 103.98.40.0 1024 103.98.44.0 1024 @@ -3537,7 +3501,6 @@ 103.100.68.0 1024 103.100.88.0 1024 103.100.116.0 1024 -103.100.140.0 1024 103.100.144.0 1024 103.100.236.0 1024 103.100.240.0 1024 @@ -3552,7 +3515,6 @@ 103.101.124.0 1024 103.101.144.0 1024 103.101.148.0 1024 -103.101.153.0 256 103.101.180.0 1024 103.101.184.0 1024 103.102.76.0 1024 @@ -3570,7 +3532,6 @@ 103.103.12.0 1024 103.103.16.0 1024 103.103.36.0 1024 -103.103.68.0 1024 103.103.72.0 1024 103.103.176.0 1024 103.103.188.0 1024 @@ -3590,7 +3551,6 @@ 103.104.104.0 1024 103.104.152.0 1024 103.104.168.0 1024 -103.104.172.0 1024 103.104.188.0 1024 103.104.198.0 512 103.104.252.0 1024 @@ -3599,7 +3559,6 @@ 103.105.12.0 1024 103.105.16.0 1024 103.105.23.0 256 -103.105.56.0 1024 103.105.60.0 1024 103.105.116.0 1024 103.105.132.0 1024 @@ -3618,14 +3577,12 @@ 103.106.128.0 1024 103.106.132.0 1024 103.106.160.0 1024 -103.106.188.0 1024 103.106.196.0 1024 103.106.202.0 512 103.106.212.0 1024 103.106.244.0 1024 103.106.252.0 1024 103.107.0.0 1024 -103.107.8.0 256 103.107.28.0 1024 103.107.32.0 1024 103.107.44.0 1024 @@ -3640,7 +3597,6 @@ 103.107.216.0 1024 103.107.220.0 1024 103.108.52.0 1024 -103.108.64.0 1024 103.108.160.0 1024 103.108.164.0 1024 103.108.184.0 512 @@ -3651,27 +3607,20 @@ 103.108.212.0 1024 103.108.224.0 1024 103.108.244.0 1024 -103.108.251.0 256 103.109.20.0 1024 103.109.48.0 1024 103.109.88.0 1024 103.109.106.0 512 103.109.248.0 1024 -103.110.32.0 1024 103.110.80.0 512 103.110.92.0 1024 -103.110.100.0 1024 103.110.116.0 1024 -103.110.127.0 256 -103.110.128.0 512 -103.110.131.0 256 103.110.132.0 1024 103.110.136.0 1024 103.110.152.0 1024 103.110.156.0 1024 103.110.188.0 1024 103.110.204.0 1024 -103.111.38.0 512 103.111.64.0 1024 103.111.172.0 1024 103.111.252.0 1024 @@ -3687,7 +3636,6 @@ 103.112.140.0 1024 103.112.172.0 1024 103.112.184.0 1024 -103.112.208.0 1024 103.113.4.0 1024 103.113.92.0 1024 103.113.144.0 1024 @@ -3720,7 +3668,6 @@ 103.115.148.0 1024 103.115.204.0 512 103.115.248.0 1024 -103.116.20.0 1024 103.116.40.0 1024 103.116.64.0 1024 103.116.72.0 1024 @@ -3729,6 +3676,7 @@ 103.116.120.0 1024 103.116.128.0 1024 103.116.132.0 512 +103.116.138.0 512 103.116.148.0 1024 103.116.184.0 1024 103.116.206.0 512 @@ -3738,11 +3686,9 @@ 103.117.16.0 1024 103.117.72.0 1024 103.117.88.0 1024 -103.117.132.0 1024 103.117.136.0 1024 103.117.188.0 1024 103.117.220.0 1024 -103.118.19.0 256 103.118.36.0 1024 103.118.52.0 1024 103.118.56.0 1024 @@ -3777,7 +3723,6 @@ 103.119.224.0 1024 103.120.52.0 1024 103.120.72.0 1024 -103.120.76.0 256 103.120.88.0 1024 103.120.96.0 1024 103.120.100.0 1024 @@ -3825,7 +3770,6 @@ 103.126.128.0 1024 103.126.132.0 1024 103.126.208.0 1024 -103.126.241.0 256 103.129.52.0 1024 103.130.132.0 1024 103.130.152.0 256 @@ -3833,12 +3777,14 @@ 103.130.228.0 1024 103.131.20.0 1024 103.131.36.0 1024 +103.131.138.0 512 103.131.152.0 1024 103.131.168.0 1024 103.131.176.0 1024 103.131.224.0 1024 103.131.228.0 1024 103.131.240.0 1024 +103.132.22.0 512 103.132.60.0 1024 103.132.64.0 1024 103.132.68.0 1024 @@ -3864,6 +3810,7 @@ 103.133.232.0 1024 103.134.12.0 256 103.134.196.0 1024 +103.134.232.0 512 103.135.80.0 1024 103.135.124.0 1024 103.135.148.0 1024 @@ -3881,7 +3828,6 @@ 103.137.60.0 256 103.137.76.0 1024 103.137.136.0 512 -103.137.149.0 256 103.137.180.0 1024 103.137.236.0 1024 103.138.2.0 512 @@ -3896,39 +3842,33 @@ 103.139.0.0 512 103.139.2.0 512 103.139.22.0 512 +103.139.92.0 512 103.139.113.0 256 103.139.134.0 512 103.139.136.0 512 103.139.172.0 512 -103.139.200.0 512 103.139.204.0 512 103.139.212.0 512 103.140.8.0 512 103.140.14.0 512 -103.140.46.0 512 103.140.70.0 512 103.140.126.0 512 103.140.140.0 512 103.140.144.0 512 103.140.152.0 512 103.140.192.0 512 -103.140.194.0 512 103.140.228.0 512 103.141.10.0 512 -103.141.36.0 512 103.141.58.0 512 103.141.128.0 512 103.141.186.0 512 -103.141.190.0 512 103.141.242.0 512 -103.142.0.0 512 103.142.28.0 512 103.142.58.0 512 103.142.82.0 512 103.142.96.0 512 103.142.102.0 512 103.142.122.0 512 -103.142.126.0 256 103.142.128.0 512 103.142.140.0 512 103.142.154.0 512 @@ -3957,7 +3897,6 @@ 103.144.66.0 512 103.144.70.0 512 103.144.72.0 512 -103.144.88.0 256 103.144.108.0 512 103.144.136.0 512 103.144.148.0 512 @@ -3977,14 +3916,11 @@ 103.145.122.0 512 103.145.188.0 512 103.145.190.0 512 -103.146.6.0 512 103.146.72.0 512 -103.146.88.0 512 103.146.90.0 512 103.146.124.0 512 103.146.126.0 512 103.146.138.0 512 -103.146.147.0 256 103.146.230.0 512 103.146.236.0 512 103.146.252.0 512 @@ -3992,7 +3928,6 @@ 103.147.124.0 512 103.147.198.0 512 103.147.206.0 512 -103.147.211.0 256 103.148.174.0 512 103.149.6.0 512 103.149.17.0 256 @@ -4002,7 +3937,6 @@ 103.149.144.0 512 103.149.156.0 512 103.149.181.0 256 -103.149.190.0 512 103.149.210.0 512 103.149.214.0 512 103.149.220.0 512 @@ -4010,6 +3944,7 @@ 103.149.244.0 512 103.149.246.0 512 103.149.248.0 512 +103.150.10.0 512 103.150.24.0 512 103.150.66.0 512 103.150.72.0 512 @@ -4043,7 +3978,6 @@ 103.152.30.0 512 103.152.56.0 512 103.152.76.0 512 -103.152.80.0 512 103.152.98.0 512 103.152.112.0 512 103.152.120.0 512 @@ -4060,6 +3994,175 @@ 103.152.224.0 512 103.152.226.0 512 103.152.246.0 512 +103.152.250.0 512 +103.153.4.0 512 +103.153.36.0 512 +103.153.100.0 512 +103.153.114.0 512 +103.153.122.0 512 +103.153.128.0 512 +103.153.132.0 512 +103.153.138.0 512 +103.153.146.0 512 +103.153.160.0 512 +103.154.18.0 512 +103.154.30.0 512 +103.154.32.0 512 +103.154.40.0 512 +103.154.66.0 512 +103.154.162.0 512 +103.154.164.0 512 +103.154.168.0 512 +103.154.242.0 512 +103.155.14.0 512 +103.155.16.0 512 +103.155.34.0 512 +103.155.48.0 512 +103.155.76.0 512 +103.155.100.0 512 +103.155.110.0 512 +103.155.120.0 512 +103.155.214.0 512 +103.155.248.0 512 +103.156.28.0 512 +103.156.68.0 512 +103.156.78.0 512 +103.156.104.0 512 +103.156.158.0 512 +103.156.174.0 512 +103.156.186.0 512 +103.156.228.0 512 +103.157.30.0 512 +103.157.138.0 512 +103.157.174.0 512 +103.157.212.0 512 +103.157.234.0 512 +103.157.254.0 512 +103.158.0.0 512 +103.158.8.0 512 +103.158.16.0 512 +103.158.190.0 512 +103.158.200.0 512 +103.158.224.0 512 +103.159.80.0 512 +103.159.122.0 512 +103.159.124.0 512 +103.159.134.0 512 +103.159.142.0 512 +103.160.32.0 512 +103.160.34.0 512 +103.160.112.0 512 +103.160.114.0 512 +103.160.244.0 512 +103.160.254.0 512 +103.161.14.0 512 +103.161.102.0 512 +103.161.138.0 512 +103.161.208.0 512 +103.161.220.0 512 +103.161.254.0 512 +103.162.10.0 512 +103.162.32.0 512 +103.162.116.0 512 +103.163.28.0 512 +103.163.32.0 512 +103.163.46.0 512 +103.163.74.0 512 +103.163.180.0 512 +103.164.4.0 512 +103.164.32.0 512 +103.164.40.0 512 +103.164.42.0 512 +103.164.64.0 512 +103.164.76.0 512 +103.164.178.0 512 +103.165.44.0 512 +103.165.52.0 512 +103.165.82.0 512 +103.165.110.0 512 +103.166.20.0 512 +103.166.50.0 512 +103.166.52.0 512 +103.166.54.0 512 +103.166.84.0 512 +103.166.138.0 512 +103.166.242.0 512 +103.166.246.0 512 +103.167.0.0 512 +103.167.36.0 512 +103.167.100.0 512 +103.168.98.0 512 +103.168.170.0 512 +103.169.50.0 512 +103.169.62.0 512 +103.169.108.0 512 +103.169.162.0 512 +103.169.202.0 512 +103.169.216.0 512 +103.170.4.0 512 +103.170.72.0 512 +103.170.134.0 512 +103.170.210.0 512 +103.170.212.0 512 +103.171.32.0 512 +103.171.166.0 512 +103.171.214.0 512 +103.172.32.0 512 +103.172.160.0 512 +103.172.191.0 256 +103.173.102.0 512 +103.173.182.0 512 +103.173.184.0 512 +103.174.94.0 512 +103.175.14.0 512 +103.175.98.0 512 +103.175.114.0 512 +103.175.118.0 512 +103.176.52.0 512 +103.176.222.0 512 +103.176.244.0 512 +103.177.28.0 512 +103.177.44.0 512 +103.177.70.0 512 +103.177.136.0 512 +103.177.162.0 512 +103.178.56.0 512 +103.178.240.0 512 +103.179.76.0 512 +103.179.78.0 512 +103.180.108.0 512 +103.180.226.0 512 +103.181.164.0 512 +103.181.234.0 512 +103.183.26.0 512 +103.183.66.0 512 +103.183.122.0 512 +103.183.124.0 512 +103.184.44.0 512 +103.184.46.0 512 +103.184.60.0 512 +103.185.78.0 512 +103.185.80.0 512 +103.185.228.0 512 +103.186.4.0 512 +103.186.108.0 512 +103.186.112.0 512 +103.186.136.0 512 +103.186.158.0 512 +103.186.162.0 512 +103.186.228.0 512 +103.189.92.0 512 +103.189.140.0 512 +103.189.152.0 512 +103.189.154.0 512 +103.190.20.0 512 +103.190.71.0 256 +103.190.104.0 512 +103.190.116.0 512 +103.190.118.0 512 +103.190.122.0 512 +103.191.102.0 512 +103.191.242.0 512 103.192.0.0 1024 103.192.4.0 1024 103.192.8.0 1024 @@ -4093,10 +4196,7 @@ 103.193.40.0 1024 103.193.44.0 1024 103.193.120.0 1024 -103.193.124.0 1024 103.193.140.0 1024 -103.193.144.0 1024 -103.193.148.0 1024 103.193.160.0 1024 103.193.188.0 1024 103.193.192.0 1024 @@ -4107,16 +4207,12 @@ 103.193.228.0 1024 103.193.232.0 1024 103.193.236.0 1024 -103.193.240.0 1024 103.194.16.0 1024 103.195.104.0 1024 103.195.112.0 1024 -103.195.136.0 1024 103.195.148.0 1024 103.195.152.0 1024 103.195.160.0 1024 -103.195.192.0 1024 -103.196.60.0 1024 103.196.64.0 1024 103.196.72.0 1024 103.196.88.0 1024 @@ -4124,6 +4220,7 @@ 103.196.96.0 1024 103.196.168.0 1024 103.196.204.0 1024 +103.197.0.0 1024 103.197.180.0 1024 103.197.228.0 1024 103.198.20.0 1024 @@ -4134,7 +4231,6 @@ 103.198.156.0 1024 103.198.180.0 1024 103.198.196.0 1024 -103.198.200.0 1024 103.198.216.0 1024 103.198.220.0 1024 103.198.224.0 1024 @@ -4148,8 +4244,6 @@ 103.199.228.0 1024 103.199.248.0 1024 103.199.252.0 1024 -103.200.28.0 1024 -103.200.32.0 1024 103.200.52.0 1024 103.200.64.0 1024 103.200.68.0 1024 @@ -4295,7 +4389,6 @@ 103.203.24.0 1024 103.203.28.0 1024 103.203.32.0 1024 -103.203.52.0 1024 103.203.56.0 1024 103.203.96.0 1024 103.203.100.0 1024 @@ -4323,6 +4416,7 @@ 103.204.148.0 1024 103.204.152.0 1024 103.204.196.0 1024 +103.204.216.0 512 103.204.232.0 1024 103.204.236.0 1024 103.205.4.0 1024 @@ -4344,11 +4438,9 @@ 103.205.252.0 1024 103.206.0.0 1024 103.206.44.0 1024 -103.206.108.0 1024 103.206.148.0 1024 103.207.48.0 1024 103.207.104.0 1024 -103.207.164.0 1024 103.207.184.0 1024 103.207.188.0 1024 103.207.192.0 1024 @@ -4366,14 +4458,11 @@ 103.208.40.0 1024 103.208.44.0 1024 103.208.48.0 1024 -103.208.148.0 1024 103.209.112.0 1024 103.209.136.0 1024 103.209.200.0 1024 103.209.208.0 1024 103.209.216.0 1024 -103.210.0.0 1024 -103.210.20.0 1024 103.210.96.0 1024 103.210.156.0 1024 103.210.160.0 1024 @@ -4398,12 +4487,10 @@ 103.212.4.0 1024 103.212.8.0 1024 103.212.12.0 1024 -103.212.32.0 1024 103.212.44.0 1024 103.212.48.0 1024 103.212.84.0 1024 103.212.100.0 1024 -103.212.104.0 1024 103.212.108.0 1024 103.212.148.0 1024 103.212.164.0 1024 @@ -4441,11 +4528,12 @@ 103.213.180.0 1024 103.213.184.0 1024 103.213.188.0 1024 -103.213.248.0 1024 -103.214.32.0 1024 +103.213.196.0 512 +103.213.198.0 512 +103.213.226.0 512 +103.213.232.0 512 103.214.48.0 1024 103.214.84.0 1024 -103.214.168.0 1024 103.214.212.0 1024 103.214.240.0 1024 103.214.244.0 1024 @@ -4455,13 +4543,10 @@ 103.215.44.0 1024 103.215.48.0 1024 103.215.100.0 1024 -103.215.104.0 1024 103.215.108.0 1024 103.215.116.0 1024 103.215.120.0 1024 103.215.140.0 1024 -103.215.184.0 1024 -103.215.228.0 1024 103.216.4.0 1024 103.216.8.0 1024 103.216.12.0 1024 @@ -4507,7 +4592,6 @@ 103.217.196.0 1024 103.217.200.0 1024 103.217.204.0 1024 -103.218.0.0 1024 103.218.8.0 1024 103.218.12.0 1024 103.218.16.0 1024 @@ -4529,7 +4613,6 @@ 103.218.84.0 1024 103.218.88.0 1024 103.218.92.0 1024 -103.218.184.0 1024 103.218.192.0 1024 103.218.196.0 1024 103.218.200.0 1024 @@ -4754,12 +4837,14 @@ 103.224.224.0 1024 103.224.228.0 1024 103.224.232.0 1024 +103.225.18.0 256 103.225.84.0 1024 103.226.16.0 1024 103.226.40.0 1024 103.226.56.0 1024 103.226.60.0 1024 103.226.80.0 1024 +103.226.116.0 512 103.226.132.0 1024 103.226.156.0 1024 103.226.180.0 1024 @@ -4777,9 +4862,7 @@ 103.227.212.0 1024 103.227.228.0 1024 103.228.12.0 1024 -103.228.28.0 1024 103.228.88.0 1024 -103.228.128.0 1024 103.228.136.0 1024 103.228.160.0 1024 103.228.176.0 1024 @@ -4802,6 +4885,8 @@ 103.230.28.0 1024 103.230.44.0 1024 103.230.96.0 1024 +103.230.110.0 512 +103.230.128.0 512 103.230.196.0 1024 103.230.200.0 1024 103.230.204.0 1024 @@ -4811,12 +4896,12 @@ 103.231.20.0 1024 103.231.64.0 1024 103.231.68.0 1024 -103.231.144.0 1024 103.231.180.0 1024 103.231.184.0 1024 103.231.244.0 1024 103.232.4.0 1024 103.232.144.0 1024 +103.232.166.0 512 103.232.188.0 1024 103.232.212.0 1024 103.233.4.0 1024 @@ -4825,6 +4910,8 @@ 103.233.104.0 1024 103.233.128.0 1024 103.233.136.0 1024 +103.233.162.0 512 +103.233.178.0 512 103.233.228.0 1024 103.234.0.0 1024 103.234.20.0 1024 @@ -4833,12 +4920,12 @@ 103.234.172.0 1024 103.234.180.0 1024 103.234.244.0 1024 -103.235.16.0 1024 103.235.48.0 1024 103.235.56.0 1024 103.235.60.0 1024 103.235.80.0 1024 103.235.84.0 1024 +103.235.100.0 1024 103.235.128.0 1024 103.235.132.0 1024 103.235.136.0 1024 @@ -4898,6 +4985,7 @@ 103.237.28.0 1024 103.237.68.0 1024 103.237.88.0 1024 +103.237.92.0 512 103.237.152.0 1024 103.237.176.0 1024 103.237.180.0 1024 @@ -4938,6 +5026,7 @@ 103.238.132.0 1024 103.238.140.0 1024 103.238.144.0 1024 +103.238.152.0 512 103.238.160.0 1024 103.238.164.0 1024 103.238.168.0 1024 @@ -4952,10 +5041,8 @@ 103.239.0.0 1024 103.239.44.0 1024 103.239.68.0 1024 -103.239.96.0 1024 103.239.152.0 1024 103.239.156.0 1024 -103.239.176.0 1024 103.239.180.0 1024 103.239.184.0 1024 103.239.192.0 1024 @@ -4966,21 +5053,25 @@ 103.239.244.0 1024 103.240.16.0 1024 103.240.36.0 1024 +103.240.42.0 512 103.240.72.0 1024 103.240.84.0 1024 103.240.124.0 1024 -103.240.156.0 1024 103.240.172.0 1024 103.240.188.0 1024 +103.240.200.0 512 +103.240.202.0 512 103.240.244.0 1024 103.241.12.0 1024 103.241.72.0 1024 103.241.92.0 1024 103.241.96.0 1024 103.241.160.0 1024 +103.241.172.0 512 103.241.184.0 1024 103.241.188.0 1024 103.241.220.0 1024 +103.242.12.0 1024 103.242.64.0 1024 103.242.128.0 1024 103.242.132.0 1024 @@ -5023,6 +5114,7 @@ 103.247.168.0 1024 103.247.172.0 1024 103.247.176.0 1024 +103.247.191.0 256 103.247.200.0 1024 103.247.212.0 1024 103.248.0.0 512 @@ -5033,7 +5125,6 @@ 103.248.168.0 1024 103.248.192.0 1024 103.248.212.0 1024 -103.248.220.0 1024 103.248.224.0 1024 103.249.8.0 1024 103.249.12.0 1024 @@ -5068,7 +5159,6 @@ 103.251.160.0 1024 103.251.192.0 1024 103.251.204.0 1024 -103.251.236.0 1024 103.251.240.0 1024 103.252.28.0 1024 103.252.36.0 1024 @@ -5187,6 +5277,7 @@ 111.72.0.0 524288 111.85.0.0 65536 111.91.192.0 8192 +111.92.240.0 1024 111.92.248.0 1024 111.92.252.0 1024 111.112.0.0 131072 @@ -5280,7 +5371,6 @@ 113.208.128.0 32768 113.209.0.0 65536 113.212.0.0 16384 -113.212.64.0 1024 113.212.88.0 1024 113.212.100.0 1024 113.212.184.0 2048 @@ -5308,7 +5398,8 @@ 114.111.160.0 8192 114.112.0.0 262144 114.116.0.0 65536 -114.117.0.0 65536 +114.117.0.0 32768 +114.117.128.0 32768 114.118.0.0 65536 114.119.0.0 32768 114.119.192.0 2048 @@ -5317,12 +5408,15 @@ 114.119.208.0 4096 114.119.224.0 8192 114.132.0.0 65536 +114.134.184.0 1024 +114.134.188.0 512 114.135.0.0 65536 114.138.0.0 131072 114.141.64.0 2048 114.141.80.0 1024 114.141.84.0 1024 114.141.128.0 16384 +114.142.136.0 2048 114.196.0.0 131072 114.198.248.0 2048 114.208.0.0 262144 @@ -5411,7 +5505,9 @@ 116.193.164.0 1024 116.193.176.0 2048 116.194.0.0 131072 -116.196.0.0 65536 +116.196.0.0 32768 +116.196.128.0 16384 +116.196.192.0 16384 116.197.160.0 1024 116.197.164.0 1024 116.198.0.0 65536 @@ -5419,14 +5515,9 @@ 116.199.128.0 8192 116.204.0.0 32768 116.204.132.0 1024 -116.204.168.0 1024 116.204.216.0 1024 116.204.232.0 1024 -116.204.236.0 1024 -116.204.244.0 1024 116.205.0.0 65536 -116.206.92.0 1024 -116.206.176.0 1024 116.207.0.0 65536 116.208.0.0 262144 116.212.160.0 4096 @@ -5497,7 +5588,13 @@ 118.26.96.0 2048 118.26.112.0 2048 118.26.120.0 2048 -118.26.128.0 32768 +118.26.128.0 1024 +118.26.133.0 256 +118.26.134.0 512 +118.26.136.0 2048 +118.26.160.0 4096 +118.26.188.0 1024 +118.26.192.0 16384 118.28.0.0 131072 118.30.0.0 65536 118.31.0.0 65536 @@ -5518,7 +5615,6 @@ 118.103.168.0 1024 118.103.172.0 1024 118.103.176.0 1024 -118.107.180.0 1024 118.112.0.0 524288 118.120.0.0 262144 118.124.0.0 131072 @@ -5610,7 +5706,6 @@ 119.40.128.0 32768 119.41.0.0 65536 119.42.0.0 8192 -119.42.52.0 1024 119.42.128.0 2048 119.42.136.0 2048 119.42.224.0 8192 @@ -5645,7 +5740,9 @@ 119.162.0.0 131072 119.164.0.0 262144 119.176.0.0 1048576 -119.232.0.0 131072 +119.232.0.0 65536 +119.233.0.0 32768 +119.233.128.0 32768 119.235.128.0 16384 119.248.0.0 262144 119.252.96.0 2048 @@ -5725,6 +5822,7 @@ 121.76.0.0 131072 121.79.128.0 16384 121.89.0.0 65536 +121.91.104.0 2048 121.100.128.0 32768 121.101.0.0 16384 121.101.208.0 4096 @@ -5741,7 +5839,8 @@ 122.0.64.0 16384 122.0.128.0 32768 122.4.0.0 262144 -122.8.0.0 65536 +122.8.0.0 32768 +122.8.192.0 16384 122.9.0.0 65536 122.10.128.0 1024 122.10.132.0 512 @@ -5859,7 +5958,6 @@ 123.242.196.0 1024 123.244.0.0 262144 123.249.0.0 65536 -123.253.108.0 1024 123.253.240.0 1024 123.254.96.0 1024 123.254.100.0 1024 @@ -5886,7 +5984,8 @@ 124.64.0.0 131072 124.66.0.0 32768 124.67.0.0 65536 -124.68.0.0 262144 +124.68.0.0 131072 +124.70.0.0 131072 124.72.0.0 65536 124.73.0.0 65536 124.74.0.0 131072 @@ -5993,7 +6092,6 @@ 139.5.160.0 1024 139.5.192.0 1024 139.5.204.0 1024 -139.5.208.0 1024 139.5.212.0 1024 139.5.244.0 1024 139.9.0.0 65536 @@ -6019,7 +6117,8 @@ 140.179.0.0 65536 140.205.0.0 65536 140.206.0.0 131072 -140.210.0.0 65536 +140.210.0.0 32768 +140.210.128.0 32768 140.224.0.0 65536 140.237.0.0 65536 140.240.0.0 65536 @@ -6030,10 +6129,10 @@ 140.255.0.0 65536 142.70.0.0 65536 142.86.0.0 65536 +143.64.0.0 65536 144.0.0.0 65536 144.7.0.0 65536 144.12.0.0 65536 -144.48.8.0 1024 144.48.64.0 1024 144.48.88.0 1024 144.48.156.0 1024 @@ -6063,7 +6162,6 @@ 150.122.0.0 65536 150.129.136.0 1024 150.129.192.0 1024 -150.129.216.0 1024 150.129.252.0 1024 150.138.0.0 131072 150.158.0.0 65536 @@ -6113,13 +6211,10 @@ 157.0.0.0 65536 157.18.0.0 65536 157.61.0.0 65536 -157.119.0.0 1024 157.119.8.0 1024 157.119.12.0 1024 157.119.16.0 1024 157.119.28.0 1024 -157.119.68.0 1024 -157.119.112.0 1024 157.119.132.0 1024 157.119.136.0 1024 157.119.140.0 1024 @@ -6138,7 +6233,9 @@ 157.148.0.0 65536 157.156.0.0 65536 157.255.0.0 65536 +158.60.0.0 65536 158.79.0.0 65536 +159.27.0.0 65536 159.75.0.0 65536 159.226.0.0 65536 160.19.208.0 1024 @@ -6205,6 +6302,7 @@ 163.177.0.0 65536 163.179.0.0 65536 163.204.0.0 65536 +163.228.0.0 65536 164.52.0.0 32768 166.111.0.0 65536 167.139.0.0 65536 @@ -6256,7 +6354,6 @@ 175.176.156.0 1024 175.176.176.0 1024 175.176.188.0 1024 -175.176.192.0 1024 175.178.0.0 65536 175.184.128.0 16384 175.185.0.0 65536 @@ -6342,8 +6439,6 @@ 182.239.0.0 8192 182.240.0.0 524288 182.254.0.0 65536 -182.255.32.0 1024 -182.255.36.0 1024 182.255.60.0 1024 183.0.0.0 4194304 183.64.0.0 524288 @@ -6368,9 +6463,9 @@ 185.203.36.0 1024 188.131.128.0 32768 192.51.188.0 256 -192.55.46.0 256 +192.55.46.0 512 192.55.68.0 1024 -192.102.204.0 512 +192.102.204.0 1024 192.124.154.0 256 192.140.128.0 1024 192.140.132.0 1024 @@ -6399,7 +6494,6 @@ 202.0.122.0 512 202.0.176.0 1024 202.3.128.0 512 -202.3.134.0 256 202.4.128.0 8192 202.4.252.0 1024 202.5.208.0 1024 @@ -6608,7 +6702,6 @@ 202.52.34.0 256 202.52.47.0 256 202.52.143.0 256 -202.52.144.0 256 202.53.140.0 256 202.53.143.0 256 202.57.192.0 1024 @@ -6619,7 +6712,6 @@ 202.57.216.0 1024 202.57.240.0 4096 202.58.0.0 256 -202.58.101.0 256 202.58.104.0 1024 202.58.112.0 1024 202.59.0.0 256 @@ -6683,7 +6775,6 @@ 202.74.42.0 256 202.74.52.0 256 202.74.80.0 4096 -202.74.232.0 1024 202.74.254.0 512 202.75.208.0 4096 202.75.252.0 1024 @@ -6717,7 +6808,6 @@ 202.89.108.0 1024 202.89.119.0 256 202.89.232.0 2048 -202.90.0.0 1024 202.90.16.0 1024 202.90.20.0 1024 202.90.24.0 1024 @@ -6731,25 +6821,22 @@ 202.90.193.0 256 202.90.196.0 256 202.90.205.0 256 -202.90.224.0 4096 +202.90.224.0 2048 +202.90.232.0 2048 202.91.0.0 1024 202.91.36.0 1024 202.91.96.0 4096 202.91.128.0 1024 202.91.176.0 4096 202.91.224.0 8192 -202.92.0.0 1024 202.92.8.0 2048 202.92.48.0 4096 202.92.252.0 1024 -202.93.0.0 1024 202.93.252.0 1024 -202.94.68.0 256 202.94.74.0 256 202.94.81.0 256 202.94.92.0 1024 202.95.240.0 2048 -202.95.252.0 1024 202.96.0.0 16384 202.96.64.0 2048 202.96.72.0 2048 @@ -6953,13 +7040,11 @@ 202.127.112.0 4096 202.127.128.0 4096 202.127.144.0 4096 -202.127.160.0 2048 202.127.192.0 512 202.127.194.0 512 202.127.196.0 1024 202.127.200.0 2048 202.127.208.0 256 -202.127.209.0 256 202.127.212.0 1024 202.127.216.0 2048 202.127.224.0 8192 @@ -7923,9 +8008,7 @@ 203.86.250.0 256 203.86.254.0 512 203.88.32.0 8192 -203.88.100.0 1024 203.88.192.0 8192 -203.89.0.0 1024 203.89.8.0 2048 203.89.100.0 1024 203.89.133.0 256 @@ -8064,7 +8147,6 @@ 203.189.6.0 512 203.189.112.0 1024 203.189.192.0 8192 -203.189.232.0 1024 203.189.240.0 1024 203.190.96.0 4096 203.190.249.0 256 @@ -8110,7 +8192,6 @@ 203.212.80.0 4096 203.215.232.0 2048 203.217.164.0 1024 -203.223.0.0 4096 203.223.16.0 2048 204.52.191.0 256 210.2.0.0 4096 @@ -8173,12 +8254,22 @@ 210.74.128.0 8192 210.74.160.0 8192 210.74.192.0 16384 -210.75.0.0 65536 +210.75.0.0 32768 +210.75.128.0 8192 +210.75.160.0 8192 +210.75.192.0 8192 +210.75.224.0 8192 210.76.0.0 8192 210.76.32.0 8192 210.76.64.0 16384 -210.76.128.0 32768 -210.77.0.0 65536 +210.76.128.0 16384 +210.76.192.0 8192 +210.76.224.0 8192 +210.77.0.0 8192 +210.77.32.0 8192 +210.77.64.0 8192 +210.77.96.0 8192 +210.77.128.0 32768 210.78.0.0 8192 210.78.32.0 8192 210.78.64.0 16384 @@ -8227,7 +8318,11 @@ 211.143.0.0 65536 211.144.0.0 131072 211.146.0.0 65536 -211.147.0.0 65536 +211.147.0.0 32768 +211.147.128.0 16384 +211.147.192.0 4096 +211.147.208.0 4096 +211.147.224.0 8192 211.148.0.0 262144 211.152.0.0 131072 211.154.0.0 65536 @@ -8235,9 +8330,24 @@ 211.155.64.0 8192 211.155.96.0 8192 211.155.128.0 32768 -211.156.0.0 262144 +211.156.0.0 16384 +211.156.64.0 4096 +211.156.80.0 4096 +211.156.96.0 8192 +211.156.128.0 8192 +211.156.160.0 4096 +211.156.176.0 4096 +211.156.192.0 16384 +211.157.0.0 65536 +211.158.0.0 131072 211.160.0.0 262144 -211.164.0.0 262144 +211.164.0.0 131072 +211.166.0.0 65536 +211.167.0.0 32768 +211.167.128.0 8192 +211.167.160.0 4096 +211.167.176.0 4096 +211.167.192.0 16384 212.64.0.0 32768 212.129.128.0 32768 218.0.0.0 65536 @@ -8310,7 +8420,11 @@ 218.204.0.0 131072 218.206.0.0 131072 218.240.0.0 262144 -218.244.0.0 131072 +218.244.0.0 16384 +218.244.64.0 8192 +218.244.96.0 8192 +218.244.128.0 32768 +218.245.0.0 65536 218.246.0.0 131072 218.249.0.0 65536 219.72.0.0 65536 @@ -8518,7 +8632,8 @@ 223.116.0.0 131072 223.120.128.0 32768 223.121.128.0 32768 -223.122.0.0 131072 +223.122.128.0 32768 +223.123.128.0 32768 223.124.0.0 262144 223.128.0.0 131072 223.144.0.0 1048576 diff --git a/code/default/smart_router/local/connect_manager.py b/code/default/smart_router/local/connect_manager.py index d9a05da9ed..317ff3c7ec 100644 --- a/code/default/smart_router/local/connect_manager.py +++ b/code/default/smart_router/local/connect_manager.py @@ -17,7 +17,7 @@ from .socket_wrap import SocketWrap -import simple_queue +from queue import Queue import socks from . import global_var as g from xlog import getLogger @@ -72,7 +72,7 @@ def check_thread(self): except: pass - time.sleep(1) + time.sleep(10) def add_sock(self, host_port, sock): with self.lock: @@ -150,16 +150,16 @@ def get_conn(self, host, ips, port, timeout=5): ip_time = sorted(list(ip_rate.items()), key=operator.itemgetter(1)) ordered_ips = [ip for ip, rate in ip_time] - wait_queue = simple_queue.Queue() + wait_queue = Queue() wait_t = 0.2 for ip in ordered_ips: threading.Thread(target=self.create_connect, args=(wait_queue, host, ip, port)).start() - status = wait_queue.get(wait_t) - if status: + try: + status = wait_queue.get(timeout=wait_t) sock = self.get_sock_from_cache(host_port) if sock: return sock - else: + except: time.sleep(wait_t) wait_t += 0.1 @@ -168,8 +168,10 @@ def get_conn(self, host, ips, port, timeout=5): if time_left <= 0: return self.get_sock_from_cache(host_port) - status = wait_queue.get(time_left) - if status: + try: + status = wait_queue.get(timeout=time_left) sock = self.get_sock_from_cache(host_port) if sock: - return sock \ No newline at end of file + return sock + except: + pass \ No newline at end of file diff --git a/code/default/smart_router/local/dns_query.py b/code/default/smart_router/local/dns_query.py index dd41dec835..f5c4388850 100644 --- a/code/default/smart_router/local/dns_query.py +++ b/code/default/smart_router/local/dns_query.py @@ -23,7 +23,7 @@ noarch_lib = os.path.join(python_path, 'lib', 'noarch') sys.path.append(noarch_lib) -import simple_queue +from queue import Queue import lru_cache import utils import simple_http_client @@ -194,7 +194,7 @@ def query(self, domain, dns_type=1, timeout=3): if id not in self.waiters: break - que = simple_queue.Queue() + que = Queue() que.domain = domain for server_ip in self.dns_server: @@ -205,7 +205,11 @@ def query(self, domain, dns_type=1, timeout=3): self.waiters[id] = que self.send_request(id, server_ip, domain, dns_type) - ips = que.get(self.timeout) or [] + try: + ips = que.get(timeout=self.timeout) + except: + ips = [] + if ips: ips = list(set(ips)) @@ -480,15 +484,16 @@ def query_worker(self, task, function): task.put(ips) def query(self, domain, dns_type, funcs): - task = simple_queue.Queue() + task = Queue() task.domain = domain task.dns_type = dns_type for func in funcs: threading.Thread(target=self.query_worker, args=(task, func)).start() - ips = task.get(5) - if not ips: + try: + ips = task.get(timeout=5) + except: ips = [] return ips @@ -549,13 +554,15 @@ def query(self, domain, dns_type=1, history=[]): xlog.debug("DNS query:%s in black", domain) return ips - elif b"." not in domain or g.gfwlist.in_white_list(domain): + elif b"." not in domain or g.gfwlist.in_white_list(domain) or rule in ["direct"]: ips = self.local_dns_resolve.query(domain, timeout=1) g.domain_cache.set_ips(domain, ips, dns_type) return ips elif g.gfwlist.in_block_list(domain) or rule in ["gae", "socks"] or g.config.pac_policy == "all_X-Tunnel": ips = self.query_blocked_domain(domain, dns_type) + elif g.gfwlist.in_white_list(domain): + ips = self.local_dns_resolve.query(domain, dns_type, timeout=1) else: ips = self.query_unknown_domain(domain, dns_type) diff --git a/code/default/smart_router/local/gfw_white_list.txt b/code/default/smart_router/local/gfw_white_list.txt index 4aba62c120..a478c62ad1 100644 --- a/code/default/smart_router/local/gfw_white_list.txt +++ b/code/default/smart_router/local/gfw_white_list.txt @@ -3,55 +3,68 @@ 163.com 163yun.com 17173cdn.com +178.com 2345.com -28803k.com +360safe.com 56.com 5eplay.com 5ewin.com 71.am 71edge.com 78dm.net +88cdn.com 93x.net aboutcg.org acfunchina.com -acgvideo.com aixifan.com -akamaized.net +ajmide.com ali213.net +aliapp.org alibabadns.com alicdn.com +alipay.com +alipayobjects.com alivecdn.com aliyuncs.com allrace.com +amap.com amemv.com apcdns.net apple.com +autonavi.com baidu.com baidupcs.com baidustatic.com +baike.com bcebos.com bcevod.com bdimg.com bdstatic.com +bdurl.net bibi-baidu.com +biliapi.net bilibili.com biligame.com biligame.net bilivideo.com +bing.com +bingapis.com bokecs.net bootcss.com btigroup.io +bytedance.com cccpan.com cdncl.net chiphell.com cibntv.net -clientservices.googleapis.com cloudcdn.net cmcmcdn.com cn cnblogs.com cnhsjz.com cnwest.com +csdn.net +ctobsnssdk.com dbankcdn.com dftoutiao.com dianshihome.com @@ -60,18 +73,20 @@ dlfyb.com dmzj.com do1byvision.com douyin.com +douyincdn.com +douyinliving.com +douyinpic.com +douyinvod.com douyu.com duoduocdn.com duokanbox.com duolebo.com duomi.com duowan.com -esportsmatrix.com fjhbwc.com -fonts.googleapis.com +funshion.com game100.wiki gamekee.com -gamer.com.tw gitv.tv gmugmu.com gtimg.com @@ -85,14 +100,19 @@ hinet.net hitv.com huijistatic.com hunantv.com +huoshanlive.com +hupucdn.com huya.com +icloud.com iask.com +id6.me imkan.tv imooc.com ip138.com iqiyi.com iqiyipic.com ishuhui.com +ixigua.com jfcdns.com jiaoyimao.com jomodns.com @@ -101,41 +121,51 @@ jxcctjg.com kandian.com kankan.com kantv6.com -khm.googleapis.com -kktv.com.tw kmf.com ksyungslb.com kugou.com +kuiniuca.com le.com lecloud.com leisu.com +lenovomm.com letv.com linstitute.net +live.com ljcdn.com mankosupply.com max-c.com mgtv.com +mi.com mi-img.com miaopai.com microsoft.com miguvideo.com missevan.com +miui.com mjshcn.com momocdn.com +msn.com myalicdn.com myqcloud.com mzstatic.com netease.com nexusmods.com nio.com +office.com +office365.com onlinedown.net +oschina.com ourdvsss.com +pangolin-sdk-toutiao.com pps.tv ppstream.com pptv.com +pstatp.com public-api.com qfxmj.com qianqian.com +qianxin.com qie.tv qiecdn.com qiqiuyun.net @@ -146,35 +176,36 @@ qqmail.com qtlglb.com remuxhdr.com ruioushang.com +sandai.net sdo.com sjmhw.com skyollie.com smtcdns.com snssdk.com sogoucdn.com +sogou.com sohu.com soku.com sqgkw.com ssports.com -steamcontent.com -steampowered.com -storage.googleapis.com suning.com +swh.app tancdn.com taobao.com tapimg.com taptapdada.com tbcache.com tencent.com +tencent-cloud.net tjxnwt.com -translate.googleapis.com +toutiaoimg.com ttpod.com tuchong.net tudou.com tutlook.com ubuntu.com uniqueway.com -update.googleapis.com +umeng.com videocc.net vzan.cc vzuu.com @@ -182,13 +213,17 @@ wangyuan.com weibo.com weibocdn.com weilekangnet.com +weixinbridge.com weiyun.com wekan.tv +windows.com +windowsupdate.com wscdns.com xdcdn.net xhscdn.com xiami.com xiami.net +xiaomi.net xiaodutv.com xiaohongshu.com xiaoka.tv @@ -207,6 +242,7 @@ yinxiang.com yinyuetai.com yixinwulian.com yongjiu6.com +youdao.com youku.com ysten.com yuboyun.com @@ -217,7 +253,9 @@ zhan.com zhangyu.tv zhibo.tv zhihu.com +zhimg.com zhuafan.live +zijieapi.com zookingsoft.com zuidadianying.com zypbo.com \ No newline at end of file diff --git a/code/default/smart_router/local/gfwlist.py b/code/default/smart_router/local/gfwlist.py index 81052d9d52..acc14fb43e 100644 --- a/code/default/smart_router/local/gfwlist.py +++ b/code/default/smart_router/local/gfwlist.py @@ -3,11 +3,22 @@ import os +import sys +import base64 +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen current_path = os.path.dirname(os.path.abspath(__file__)) root_path = os.path.abspath(os.path.join(current_path, os.pardir, os.pardir)) data_path = os.path.abspath(os.path.join(root_path, os.pardir, os.pardir, 'data', "smart_router")) +if __name__ == '__main__': + python_path = root_path + noarch_lib = os.path.abspath(os.path.join(python_path, 'lib', 'noarch')) + sys.path.append(noarch_lib) + import utils from xlog import getLogger xlog = getLogger("smart_router") @@ -18,8 +29,11 @@ def __init__(self): self.gfw_black_list = utils.to_bytes(self.load("gfw_black_list.txt")) self.gfw_white_list = utils.to_bytes(self.load("gfw_white_list.txt")) self.advertisement_list = utils.to_bytes(self.load("advertisement_list.txt")) + # xlog.debug("white_list size:%d mem:%d", len(self.gfw_white_list), sys.getsizeof(self.gfw_white_list)) + # xlog.debug("black_list size:%d mem:%d", len(self.gfw_black_list), sys.getsizeof(self.gfw_black_list)) - def load(self, name): + @staticmethod + def load(name): user_file = os.path.join(data_path, name) if os.path.isfile(user_file): list_file = user_file @@ -60,3 +74,95 @@ def is_advertisement(self, host): return True else: return False + + +class UpdateGFWList(object): + white_list_fn = os.path.join(current_path, "gfw_white_list.txt") + black_list_fn = os.path.join(current_path, "gfw_black_list.txt") + + def __init__(self): + self.white_list = self.load_white_list() + + def load_white_list(self): + white_list = [] + with open(self.white_list_fn, "r") as fd: + for line in fd.readlines(): + domain = line.strip() + if domain not in white_list: + white_list.append(domain) + + return white_list + + def download_update_white_list(self): + import subprocess + url = 'https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf' + try: + data = subprocess.check_output(['wget', url, '-O-']) + except (OSError, AttributeError): + xlog.info("Fetching data from apnic.net, it might take a few minutes, please wait...") + data = urlopen(url).read() + + for line in data.split(b"\n"): + line = line.strip() + line = utils.to_str(line) + pl = line.split("/") + if len(pl) != 3: + xlog.warn("line:%s", line) + continue + domain = pl[1] + if domain in self.white_list: + continue + + self.white_list.append(domain) + xlog.debug("white list add:%s", domain) + + def download_update_gfwlist(self): + import subprocess + url = 'https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt' + try: + data = subprocess.check_output(['wget', url, '-O-']) + except (OSError, AttributeError): + xlog.info("Fetching data from apnic.net, it might take a few minutes, please wait...") + data = urlopen(url).read() + + data = base64.b64decode(data) + + with open("gfwlist.txt", "w") as fd: + for line in data.split(b"\n"): + line = line.strip() + line = utils.to_str(line) + if line.startswith("!"): + continue + + xlog.debug("%s", line) + fd.write("%s\n" % line) + + if not line.startswith("@@"): + continue + + domain = line[2:] + if domain.startswith("http://"): + domain = domain[7:] + elif domain.startswith("https://"): + domain = domain[8:] + + if domain in self.white_list: + continue + + self.white_list.append(domain) + xlog.debug("white list add:%s", domain) + + def save_white_list(self): + self.white_list.sort() + + with open(self.white_list_fn, "w") as fd: + for domain in self.white_list: + fd.write("%s\n" % domain) + + xlog.info("white list updated to %s", self.white_list_fn) + + +if __name__ == "__main__": + updater = UpdateGFWList() + updater.download_update_white_list() + updater.save_white_list() diff --git a/code/default/smart_router/local/ip_region.py b/code/default/smart_router/local/ip_region.py index 278938c790..cd10180cfe 100644 --- a/code/default/smart_router/local/ip_region.py +++ b/code/default/smart_router/local/ip_region.py @@ -165,8 +165,16 @@ def bytes2int(s): iplist = [] fdi = open(self.cn_ipv4_range,"r") for line in fdi.readlines(): - lp = line.split() - iplist.append((utils.ip_string_to_num(lp[0]), mask_dict[lp[1]])) + line = line.strip() + if not line or line.startswith("#"): + continue + + if "/" in line: + lp = line.split("/") + iplist.append((utils.ip_string_to_num(lp[0]), int(lp[1]))) + else: + lp = line.split() + iplist.append((utils.ip_string_to_num(lp[0]), mask_dict[lp[1]])) iplist.extend(keeplist) # 排序,不然无法处理 @@ -268,5 +276,5 @@ def save_apnic_cniplist(self, fn): if __name__ == '__main__': up = UpdateIpRange() ipr = IpRegion() - xlog.info((ipr.check_ip("8.8.8.8"))) - xlog.info((ipr.check_ip("114.111.114.114"))) \ No newline at end of file + xlog.info("8.8.8.8: %s", ipr.check_ip("8.8.8.8")) + xlog.info("114.114.114.114: %s", ipr.check_ip("114.111.114.114")) diff --git a/code/default/smart_router/local/smart_route.py b/code/default/smart_router/local/smart_route.py index e088ed51c3..58eb1c1052 100644 --- a/code/default/smart_router/local/smart_route.py +++ b/code/default/smart_router/local/smart_route.py @@ -155,12 +155,12 @@ def get_sni(sock, left_buf=b""): raise SniNotExist leaddata = b"" - for _ in range(2): + for _ in range(20): leaddata = left_buf + sock.recv(65535, socket.MSG_PEEK) if leaddata: break else: - time.sleep(0.1) + time.sleep(0.01) continue if not leaddata: raise SniNotExist @@ -487,14 +487,12 @@ def handle_ip_proxy(sock, ip, port, client_address): except SniNotExist as e: xlog.debug("ip:%s:%d get sni fail", ip, port) - if g.config.pac_policy == "all_X-Tunnel": - rule = "socks" - else: - rule = g.user_rules.check_host(ip, port) - + rule = g.user_rules.check_host(ip, port) if not rule: if utils.is_private_ip(ip): rule = "direct" + elif g.config.pac_policy == "all_X-Tunnel": + rule = "socks" if rule: return try_loop("ip user", [rule], sock, ip, port, client_address) @@ -509,9 +507,10 @@ def handle_ip_proxy(sock, ip, port, client_address): else: rule_list = ["direct", "gae", "socks"] elif g.ip_region.check_ip(ip): + # China IP rule_list = ["direct", "socks"] else: - rule_list = ["direct", "gae", "socks"] + rule_list = ["gae", "socks", "direct"] if not g.config.auto_direct: for rule in ["direct", "redirect_https"]: diff --git a/code/default/version.txt b/code/default/version.txt index 3caaea5547..c7ba1e87f7 100644 --- a/code/default/version.txt +++ b/code/default/version.txt @@ -1 +1 @@ -5.4.5 \ No newline at end of file +5.5.0 \ No newline at end of file diff --git a/code/default/x_tunnel/local/base_container.py b/code/default/x_tunnel/local/base_container.py index 990777e17c..d0380d164a 100644 --- a/code/default/x_tunnel/local/base_container.py +++ b/code/default/x_tunnel/local/base_container.py @@ -332,12 +332,131 @@ def status(self): return out_string +class ConnectionReceiving(object): + def __init__(self, session, xlog): + self.session = session + self.xlog = xlog + self.running = True + self.th = None + self.select2 = selectors.DefaultSelector() + self.sock_conn_map = {} + + def start(self): + self.running = True + self.sock_conn_map = {} + + def stop(self): + self.running = False + self.xlog.debug("ConnectionReceiving stop") + + def add_sock(self, sock, conn): + if sock in self.sock_conn_map: + return + + self.xlog.debug("add sock conn:%d", conn.conn_id) + self.sock_conn_map[sock] = conn + try: + self.select2.register(sock, selectors.EVENT_READ, conn) + except Exception as e: + pass + + if not self.th: + self.th = threading.Thread(target=self.recv_worker) + self.th.start() + self.xlog.debug("ConnectionReceiving start") + + def remove_sock(self, sock): + if sock not in self.sock_conn_map: + return + + try: + self.select2.unregister(sock) + conn = self.sock_conn_map[sock] + self.xlog.debug("remove sock conn:%d", conn.conn_id) + del self.sock_conn_map[sock] + except Exception as e: + self.xlog.warn("ConnectionReceiving remove sock e:%r", e) + + def recv_worker(self): + # random_id = utils.to_str(utils.generate_random_lowercase(6)) + timeout = 0.001 + while self.running: + + if not self.sock_conn_map: + break + + try: + try: + events = self.select2.select(timeout=timeout) + if not events: + # self.xlog.debug("%s session check_upload", random_id) + has_data = self.session.check_upload() + if has_data: + timeout = 0.01 + else: + timeout = 3.0 + + # self.xlog.debug("%s recv select timeout switch to %f", random_id, timeout) + + continue + else: + # self.xlog.debug("%s recv select timeout switch to 0.001", random_id) + timeout = 0.001 + except Exception as e: + self.xlog.warn("Conn session:%s select except:%r", self.session.session_id, e) + time.sleep(3) + continue + + now = time.time() + for key, event in events: + sock = key.fileobj + conn = key.data + if event & selectors.EVENT_READ: + try: + data = sock.recv(65535) + except: + data = "" + else: + self.xlog.debug("no event for conn:%d", conn.conn_id) + data = "" + + data_len = len(data) + if data_len == 0: + self.xlog.debug("Conn session:%s conn:%d recv socket closed", self.session.session_id, conn.conn_id) + self.remove_sock(sock) + conn.transfer_peer_close("recv closed") + sock.close() + conn.do_stop(reason="recv closed.") + continue + + conn.last_active = now + # if self.session.config.show_debug: + # self.xlog.debug("Conn session:%s conn:%d local recv len:%d pos:%d", + # self.session.session_id, conn.conn_id, data_len, conn.received_position) + + conn.transfer_received_data(data) + + except Exception as e: + xlog.exception("recv_worker e:%r", e) + + for sock in self.sock_conn_map: + try: + self.select2.unregister(sock) + except Exception as e: + xlog.warn("unregister %s e:%r", sock, e) + self.sock_conn_map = {} + self.xlog.debug("ConnectionReceiving stop") + self.th = None + self.session.check_upload() + + class Conn(object): def __init__(self, session, conn_id, sock, host, port, windows_size, windows_ack, is_client, xlog): # xlog.info("session:%s conn:%d host:%s port:%d", session.session_id, conn_id, host, port) self.host = host self.port = port self.session = session + self.connection_receiver = session.connection_receiver self.conn_id = conn_id self.sock = sock self.windows_size = windows_size @@ -368,10 +487,7 @@ def __init__(self, session, conn_id, sock, host, port, windows_size, windows_ack def start(self, block): if self.sock: - self.recv_thread = threading.Thread(target=self.recv_worker) - self.recv_thread.start() - else: - self.recv_thread = None + self.connection_receiver.add_sock(self.sock, self) if block: self.cmd_thread = None @@ -411,13 +527,8 @@ def do_stop(self, reason="unknown"): self.cmd_notice.notify() self.cmd_notice.release() - self.recv_notice.acquire() - self.recv_notice.notify() - self.recv_notice.release() + self.connection_receiver.remove_sock(self.sock) - if self.recv_thread: - self.recv_thread.join() - self.recv_thread = None if self.cmd_thread: self.cmd_thread.join() self.cmd_thread = None @@ -526,9 +637,8 @@ def cmd_processor(self): self._debug_log("Conn session:%s conn:%d ACK:%d", self.session.session_id, self.conn_id, position) if position > self.remote_acked_position: self.remote_acked_position = position - self.recv_notice.acquire() - self.recv_notice.notify() - self.recv_notice.release() + + self.connection_receiver.add_sock(self.sock, self) elif cmd_id == 2: # Closed dat = data.get() @@ -622,6 +732,11 @@ def transfer_received_data(self, data): self.session.send_conn_data(self.conn_id, buf) + if self.received_position > self.remote_acked_position + self.windows_size: + self.xlog.debug("Conn session:%s conn:%d recv blocked, rcv:%d, ack:%d", self.session.session_id, + self.conn_id, self.received_position, self.remote_acked_position) + self.connection_receiver.remove_sock(self.sock) + def transfer_ack(self, position): with self.recv_notice: if self.transfered_close_to_peer: @@ -630,63 +745,3 @@ def transfer_ack(self, position): cmd_position = struct.pack(" self.remote_acked_position + self.windows_size: - self.xlog.debug("Conn session:%s conn:%d recv blocked, rcv:%d, ack:%d", self.session.session_id, self.conn_id, self.received_position, self.remote_acked_position) - self.recv_notice.wait() - continue - finally: - self.recv_notice.release() - - try: - events = select2.select(timeout=1.0) - if not events: - continue - except Exception as e: - xlog.warn("Conn session:%s conn:%d select except:%r", self.session.session_id, self.conn_id, e) - break - - to_read = False - for key, event in events: - if event & selectors.EVENT_READ: - to_read = True - - if not to_read: - break - - try: - data = sock.recv(65535) - except: - data = "" - - data_len = len(data) - if data_len == 0: - self.xlog.debug("Conn session:%s conn:%d recv socket closed", self.session.session_id, self.conn_id) - break - - self.last_active = time.time() - self._debug_log("Conn session:%s conn:%d upload len:%d pos:%d", - self.session.session_id, self.conn_id, data_len, self.received_position) - - self.transfer_received_data(data) - except Exception as e: - xlog.exception("recv_worker conn:%d e:%r", self.conn_id, e) - - self.transfer_peer_close("recv closed") - - sock.close() - self.sock = None - self.recv_thread = None - if self.is_client: - self.do_stop(reason="recv fail.") - diff --git a/code/default/x_tunnel/local/client.py b/code/default/x_tunnel/local/client.py index 897b65e37c..414831fb30 100644 --- a/code/default/x_tunnel/local/client.py +++ b/code/default/x_tunnel/local/client.py @@ -129,7 +129,7 @@ def load_config(): config.set_var("network_timeout", 10) - config.set_var("windows_size", 4 * 1024 * 1024) + config.set_var("windows_size", 10 * 1024 * 1024) # will recalulate based on: max_payload * concurent_thread_num *2 # reporter config.set_var("timeout_threshold", 2) @@ -145,6 +145,7 @@ def load_config(): config.load() config.windows_ack = 0.05 * config.windows_size + config.windows_size = config.max_payload * config.concurent_thread_num * 2 xlog.info("X-Tunnel window:%d", config.windows_size) if config.write_log_file: diff --git a/code/default/x_tunnel/local/cloudflare_front/config.py b/code/default/x_tunnel/local/cloudflare_front/config.py index 8a8986a60e..b66387b386 100644 --- a/code/default/x_tunnel/local/cloudflare_front/config.py +++ b/code/default/x_tunnel/local/cloudflare_front/config.py @@ -25,7 +25,7 @@ def __init__(self, fn): self.set_var("ssl_first_use_timeout", 5) self.set_var("connection_pool_min", 0) self.set_var("https_new_connect_num", 0) - self.set_var("connect_create_interval", 1) + self.set_var("connect_create_interval", 0) # check_ip self.set_var("check_ip_subdomain", "scan1") diff --git a/code/default/x_tunnel/local/cloudflare_front/ip_manager.py b/code/default/x_tunnel/local/cloudflare_front/ip_manager.py index 3c8cd5a0f1..2ab394dd40 100644 --- a/code/default/x_tunnel/local/cloudflare_front/ip_manager.py +++ b/code/default/x_tunnel/local/cloudflare_front/ip_manager.py @@ -17,6 +17,11 @@ def __init__(self, config, default_domain_fn, domain_fn, logger): self.domain_map = self.load_domains() # top_domain -> {} + def __str__(self): + o = "" + o += " domain_map: \r\n%s\r\n" % json.dumps(self.domain_map, indent=2) + return o + def load_domains(self): domain_map = {} # top_domain -> {} for fn in [self.domain_fn, self.default_domain_fn]: @@ -61,7 +66,7 @@ def save_domains(self, domains): def get_ip_sni_host(self): now = time.time() for top_domain, info in self.domain_map.items(): - if info["links"] > self.config.max_connection_per_domain: + if info["links"] >= self.config.max_connection_per_domain: continue if info["fail_times"] and now - info["last_try"] < 60: diff --git a/code/default/x_tunnel/local/front_dispatcher.py b/code/default/x_tunnel/local/front_dispatcher.py index 842cf09f07..fbace64253 100644 --- a/code/default/x_tunnel/local/front_dispatcher.py +++ b/code/default/x_tunnel/local/front_dispatcher.py @@ -169,6 +169,7 @@ def request(method, host, path="/", headers={}, data="", timeout=100): if g.server_host: host = g.server_host + headers["X-Async"] = "1" if len(data) < 84: padding = utils.to_str(utils.generate_random_lowercase(random.randint(64, 256))) headers["Padding"] = padding @@ -181,8 +182,9 @@ def request(method, host, path="/", headers={}, data="", timeout=100): time.sleep(1) continue - if len(content) != int(response.headers.get(b"Content-Length", 0)): - xlog.warn("response length incorrect, retry it") + header_len = int(response.headers.get(b"Content-Length", 0)) + if header_len and len(content) != header_len: + xlog.warn("response length incorrect, head len:%s, content len:%d retry it", header_len, len(content)) time.sleep(1) continue diff --git a/code/default/x_tunnel/local/proxy_session.py b/code/default/x_tunnel/local/proxy_session.py index 224ad21696..bdf68e5dd0 100644 --- a/code/default/x_tunnel/local/proxy_session.py +++ b/code/default/x_tunnel/local/proxy_session.py @@ -3,6 +3,7 @@ import json import threading import xstruct as struct +import hashlib from xlog import getLogger xlog = getLogger("x_tunnel") @@ -40,7 +41,7 @@ def sleep(t): if time.time() > end_time: return - sleep_time = min(1, end_time - time.time()) + sleep_time = min(5, end_time - time.time()) time.sleep(sleep_time) @@ -50,6 +51,7 @@ def __init__(self): self.wait_queue = base_container.WaitQueue() self.send_buffer = base_container.SendBuffer(max_payload=g.config.max_payload) self.receive_process = base_container.BlockReceivePool(self.download_data_processor) + self.connection_receiver = base_container.ConnectionReceiving(self, xlog) self.lock = threading.Lock() # lock for conn_id, sn generation, on_road_num change, self.send_delay = g.config.send_delay / 1000.0 @@ -122,7 +124,7 @@ def start(self): self.round_trip_thread[i].daemon = True self.round_trip_thread[i].start() - threading.Thread(target=self.timer).start() + self.connection_receiver.start() xlog.info("session started.") return True @@ -143,6 +145,7 @@ def stop(self): self.send_buffer.reset() self.receive_process.reset() self.wait_queue.stop() + self.connection_receiver.stop() xlog.debug("session stopped.") @@ -154,11 +157,12 @@ def reset(self): def is_idle(self): return time.time() - self.last_send_time > 60 - def timer(self): - while self.running: - if self.send_buffer.pool_size > 0 and time.time() - self.oldest_received_time > self.send_delay: - self.wait_queue.notify() - time.sleep(self.send_delay) + def check_upload(self): + # xlog.debug("check_upload send_buffer.pool_size:%d", self.send_buffer.pool_size) + if self.send_buffer.pool_size > 0: + # xlog.debug("wait_queue notify") + self.wait_queue.notify() + return True def reporter(self): sleep(5) @@ -170,7 +174,7 @@ def reporter(self): sleep(g.config.report_interval) def check_report_status(self): - if self.is_idle(): + if self.is_idle() or not g.config.api_server: return good_ip_num = 0 @@ -281,7 +285,7 @@ def convert(num, units=('B', 'KB', 'MB', 'GB')): def status(self): out_string = "session_id:%s
\n" % self.session_id - + out_string += "thread num:%d
" % threading.active_count() out_string += "running:%d
\n" % self.running out_string += "last_send_time:%f
\n" % (time.time() - self.last_send_time) out_string += "last_receive_time:%f
\n" % (time.time() - self.last_receive_time) @@ -378,8 +382,6 @@ def create_conn(self, sock, host, port): time.sleep(1) return None - self.target_on_roads = max(g.config.min_on_road, self.target_on_roads) - with self.lock: self.last_conn_id += 2 conn_id = self.last_conn_id @@ -395,6 +397,11 @@ def create_conn(self, sock, host, port): self.conn_list[conn_id] = base_container.Conn(self, conn_id, sock, host, port, g.config.windows_size, g.config.windows_ack, True, xlog) + + self.target_on_roads = \ + min(g.config.concurent_thread_num - g.config.min_on_road, self.target_on_roads + 5) + self.trigger_more() + return conn_id # Called by stop @@ -436,8 +443,7 @@ def send_conn_data(self, conn_id, data): if self.oldest_received_time == 0: self.oldest_received_time = time.time() - elif self.send_buffer.pool_size > g.config.max_payload or \ - time.time() - self.oldest_received_time > self.send_delay: + elif self.send_buffer.pool_size > g.config.max_payload: # xlog.debug("notify on send conn data") self.wait_queue.notify() @@ -466,7 +472,8 @@ def get_data(self, work_id): if self.send_buffer.pool_size > g.config.max_payload or \ (self.send_buffer.pool_size > 0 and - (time.time() - self.oldest_received_time > self.send_delay or work_id < self.target_on_roads)): + time.time() - self.oldest_received_time > self.send_delay + ): payload, sn = self.send_buffer.get() self.wait_ack_send_list[sn] = (payload, time_now) buf.append(self.sn_payload_head(sn, payload)) @@ -477,6 +484,9 @@ def get_data(self, work_id): if len(buf) > g.config.max_payload: return buf + # else: + # xlog.debug("pool_size:%d work_id:%d target_on_road:%d", + # self.send_buffer.pool_size, work_id, self.target_on_roads) return buf @@ -603,6 +613,7 @@ def normal_round_trip_worker(self, work_id): if self.send_buffer.pool_size > g.config.max_payload or \ (self.send_buffer.pool_size and len(self.wait_queue.waiters) < g.config.min_on_road): + # xlog.debug("pool_size:%s waiters:%d", self.send_buffer.pool_size, len(self.wait_queue.waiters)) server_timeout = 0 elif work_id > g.config.concurent_thread_num * 0.9: server_timeout = 1 @@ -635,8 +646,9 @@ def normal_round_trip_worker(self, work_id): if lock_time > 0.1: xlog.warn("lock_time: %f", lock_time) - # xlog.debug("start trip transfer_no:%d send_data_len:%d ack_len:%d timeout:%d", - # transfer_no, send_data_len, send_ack_len, server_timeout) + if g.config.show_debug: + xlog.debug("start trip transfer_no:%d send_data_len:%d ack_len:%d timeout:%d", + transfer_no, send_data_len, send_ack_len, server_timeout) while self.running: try: content, status, response = g.http_client.request(method="POST", host=g.server_host, @@ -678,7 +690,7 @@ def normal_round_trip_worker(self, work_id): content_length = int(response.headers.get(b"Content-Length", b"0")) recv_len = len(content) - if recv_len < 6 or recv_len != content_length: + if recv_len < 6 or (content_length and content_length != recv_len): xlog.warn("roundtrip time:%f transfer_no:%d send:%d recv:%d Head:%d", roundtrip_time, transfer_no, send_data_len, recv_len, content_length) continue @@ -722,10 +734,15 @@ def normal_round_trip_worker(self, work_id): if pack_type != 2: # normal download traffic pack xlog.error("pack type:%d", pack_type) - time.sleep(100) + time.sleep(1) continue time_cost, server_send_pool_size, data_len, ack_len = struct.unpack("= g.config.max_payload: self.target_on_roads = \ min(g.config.concurent_thread_num - g.config.min_on_road, self.target_on_roads + 10) - elif len(content) <= 21: + elif len(content) <= 53: self.target_on_roads = max(g.config.min_on_road, self.target_on_roads - 5) self.trigger_more() # xlog.debug("target roundtrip: %d, on_road: %d", self.target_on_roads, self.on_road_num) @@ -762,6 +779,18 @@ def normal_round_trip_worker(self, work_id): data = payload.get_buf(data_len) ack = payload.get_buf(ack_len) + if len(data) != data_len or len(ack) != ack_len: + xlog.warn("left data error:%d data_len:%d/%d ack_len:%d/%d", len(payload), len(data), data_len, + len(ack), ack_len) + continue + + if len(payload) >= 32: + checksum_str = utils.to_str(payload.get(32).tobytes()) + checksum = hashlib.md5(bytes(content[:-32])).hexdigest() + if checksum != checksum_str: + xlog.warn("checksum error:%s %s", checksum_str, checksum) + continue + except Exception as e: xlog.warn("trip:%d no:%d data not enough %r", work_id, transfer_no, e) continue diff --git a/code/default/x_tunnel/local/tls_relay_front/config.py b/code/default/x_tunnel/local/tls_relay_front/config.py index b93a4e50f9..2e181576f2 100644 --- a/code/default/x_tunnel/local/tls_relay_front/config.py +++ b/code/default/x_tunnel/local/tls_relay_front/config.py @@ -22,6 +22,7 @@ def __init__(self, fn): self.set_var("https_connection_pool_min", 0) self.set_var("max_links_per_ip", 1) self.set_var("https_connection_pool_max", 20) + self.set_var("connect_create_interval", 0) # connect_creator self.set_var("socket_timeout", 2) diff --git a/code/default/x_tunnel/local/upload_logs.py b/code/default/x_tunnel/local/upload_logs.py index 008d95d2ef..4e852d7123 100644 --- a/code/default/x_tunnel/local/upload_logs.py +++ b/code/default/x_tunnel/local/upload_logs.py @@ -22,7 +22,7 @@ def sleep(t): if time.time() > end_time: return - sleep_time = min(1, end_time - time.time()) + sleep_time = min(10, end_time - time.time()) if sleep_time < 0: break @@ -97,7 +97,7 @@ def upload_logs_thread(): sleep(3 * 60) while g.running: if not g.running or not g.server_host or not g.session or g.session.last_receive_time == 0: - time.sleep(1) + time.sleep(10) else: break diff --git a/code/default/x_tunnel/local/web_control.py b/code/default/x_tunnel/local/web_control.py index 5cd5951749..ade0e55d36 100644 --- a/code/default/x_tunnel/local/web_control.py +++ b/code/default/x_tunnel/local/web_control.py @@ -558,5 +558,4 @@ def req_status(self): self.response_json({ "res": "success", "status": res - })