From 98e5d8f95ac19e3fb0933343c002940cf2ce63b2 Mon Sep 17 00:00:00 2001 From: Jalin Date: Fri, 18 Jan 2019 17:08:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20cdn=20=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/cdn.txt | 2220 ++++++++++++++++++++++++++++++++++++ main.py | 2 + py12306/cluster/cluster.py | 3 + py12306/config.py | 29 +- py12306/helpers/api.py | 5 +- py12306/helpers/cdn.py | 231 ++++ py12306/helpers/request.py | 11 + py12306/log/common_log.py | 11 +- py12306/log/query_log.py | 11 +- py12306/order/order.py | 2 +- py12306/query/job.py | 16 +- 11 files changed, 2518 insertions(+), 23 deletions(-) create mode 100644 data/cdn.txt create mode 100644 py12306/helpers/cdn.py diff --git a/data/cdn.txt b/data/cdn.txt new file mode 100644 index 0000000..45cc0f4 --- /dev/null +++ b/data/cdn.txt @@ -0,0 +1,2220 @@ +202.108.23.152 +112.90.135.238 +121.40.16.194 +64.233.188.188 +47.110.242.124 +211.142.194.17 +211.142.194.16 +116.211.79.27 +101.26.37.107 +211.142.194.5 +150.138.214.85 +218.58.206.56 +150.138.169.29 +103.215.141.42 +150.138.214.84 +223.111.13.20 +123.53.139.60 +112.90.135.94 +222.221.102.39 +218.76.94.38 +118.180.15.86 +42.123.105.35 +202.120.1.61 +58.221.28.52 +112.90.135.92 +101.69.146.41 +222.221.102.40 +125.90.206.77 +125.90.206.81 +58.216.109.107 +221.235.187.130 +125.90.206.80 +218.58.206.55 +113.104.14.227 +125.90.206.82 +36.250.74.128 +150.138.214.86 +58.216.109.187 +121.11.81.237 +58.51.168.45 +119.84.128.22 +123.53.139.59 +223.111.156.210 +117.27.245.97 +14.21.78.112 +117.145.179.19 +58.221.28.51 +39.130.253.253 +112.90.133.253 +125.90.206.248 +58.220.71.63 +183.214.1.24 +58.223.166.253 +117.27.245.223 +58.216.109.105 +222.138.255.252 +221.194.180.54 +119.84.128.21 +183.131.168.148 +112.25.81.40 +60.220.196.240 +58.51.168.46 +183.131.124.39 +59.80.29.40 +114.112.172.123 +113.207.0.97 +117.27.245.54 +117.27.245.227 +112.84.104.52 +113.207.0.98 +183.47.216.87 +122.228.237.248 +221.194.180.95 +125.77.147.254 +115.223.7.249 +112.240.60.88 +183.214.1.25 +183.131.124.40 +221.194.180.92 +110.19.204.254 +58.221.28.245 +183.214.1.26 +115.223.24.254 +110.18.244.13 +101.69.146.234 +58.51.168.47 +183.236.28.146 +124.236.97.48 +58.221.28.54 +124.236.28.252 +183.240.52.107 +123.183.164.34 +61.136.167.254 +115.223.7.248 +150.138.169.238 +37.120.161.32 +110.18.244.44 +112.5.62.12 +61.147.228.248 +218.58.206.78 +112.47.20.209 +221.235.187.244 +112.90.133.247 +221.194.180.93 +221.194.180.26 +120.226.49.252 +39.130.253.48 +183.131.124.43 +112.240.60.73 +114.112.160.31 +61.188.191.254 +111.62.89.38 +112.29.227.251 +120.226.48.144 +112.28.196.100 +58.51.168.202 +124.236.28.247 +219.138.186.254 +117.145.179.248 +183.201.225.249 +111.161.122.134 +114.236.88.254 +112.90.133.246 +36.250.233.254 +122.224.186.252 +120.198.197.251 +111.161.22.16 +124.167.218.117 +58.216.109.192 +61.147.227.52 +219.157.114.72 +111.62.92.6 +112.51.125.251 +36.250.248.252 +58.220.71.253 +58.20.179.31 +123.53.139.252 +123.183.164.249 +58.216.109.109 +183.214.1.253 +114.112.160.32 +114.112.160.30 +118.123.237.254 +112.16.227.125 +218.12.228.205 +61.149.9.239 +42.81.144.78 +219.147.93.104 +36.250.248.254 +183.214.132.251 +218.29.50.27 +118.118.216.252 +223.111.196.125 +111.6.177.254 +222.221.102.254 +218.12.228.203 +112.30.197.137 +120.221.64.251 +223.111.203.126 +122.225.28.251 +120.226.49.87 +117.27.245.225 +183.240.52.132 +120.221.64.77 +183.253.58.137 +182.34.127.23 +36.250.74.127 +223.111.19.126 +111.19.233.253 +120.221.23.39 +27.148.151.251 +117.149.154.251 +218.60.185.215 +111.26.157.7 +219.138.27.249 +36.104.132.103 +221.180.208.214 +218.12.228.204 +219.147.93.62 +42.81.144.79 +221.180.218.248 +14.21.78.47 +42.81.144.77 +117.27.245.254 +183.131.168.146 +117.23.2.241 +222.186.145.254 +219.157.114.70 +118.180.15.87 +59.63.221.47 +124.116.133.63 +183.131.168.187 +111.161.122.67 +123.53.139.253 +113.207.81.126 +218.76.105.109 +183.131.168.147 +218.76.105.108 +182.242.50.48 +123.128.14.254 +117.23.2.28 +118.180.57.100 +153.99.235.112 +117.148.128.68 +125.39.1.134 +60.213.22.57 +117.27.241.254 +180.97.178.147 +58.216.109.110 +118.180.57.101 +114.112.160.29 +61.157.124.252 +125.77.130.251 +183.56.172.30 +118.180.15.252 +111.41.54.254 +163.177.132.254 +61.243.144.244 +150.138.214.122 +153.101.208.254 +124.116.133.126 +183.56.172.31 +59.63.241.54 +118.118.216.46 +58.216.23.119 +36.250.248.223 +61.167.54.31 +59.63.221.45 +110.242.21.23 +111.161.122.181 +110.242.21.24 +61.162.100.105 +61.162.100.102 +59.44.30.54 +218.12.228.202 +59.63.221.44 +59.63.221.41 +111.19.215.69 +124.236.97.49 +59.63.221.56 +183.62.114.155 +122.136.46.119 +112.240.60.69 +59.63.221.46 +150.138.167.51 +218.92.209.249 +123.138.203.56 +122.136.46.120 +180.97.178.165 +125.74.58.254 +27.195.145.124 +117.149.155.49 +112.240.60.253 +61.156.243.246 +119.84.128.254 +180.97.178.164 +223.113.14.230 +112.51.121.251 +112.17.53.253 +219.157.114.71 +112.90.135.244 +183.216.176.251 +36.102.230.254 +14.17.80.254 +42.176.192.171 +106.120.178.20 +60.18.86.100 +58.223.164.247 +59.80.28.254 +125.90.206.49 +182.140.218.254 +119.176.61.99 +61.162.100.103 +183.216.176.116 +183.214.1.251 +106.120.178.19 +150.138.167.50 +58.223.164.233 +58.221.28.53 +59.56.30.51 +183.214.140.238 +36.102.238.45 +175.43.20.64 +111.161.122.128 +180.97.178.253 +150.138.167.52 +117.161.66.125 +101.227.99.233 +116.207.132.253 +61.162.100.252 +117.21.217.27 +58.51.168.196 +118.212.138.106 +175.43.20.65 +112.25.81.68 +36.156.73.254 +182.34.127.45 +36.250.74.244 +117.169.93.247 +112.28.196.101 +120.220.18.252 +117.149.154.237 +218.76.129.252 +111.161.122.133 +14.17.80.253 +183.134.53.252 +219.157.114.252 +218.12.228.224 +125.64.102.71 +60.210.23.116 +112.17.27.55 +124.165.125.253 +14.21.78.45 +219.145.171.40 +112.51.125.254 +36.102.230.19 +61.184.117.22 +61.145.100.54 +112.25.81.118 +218.75.154.40 +118.180.57.250 +219.145.171.41 +183.56.172.251 +125.64.102.69 +61.184.117.50 +180.97.178.172 +163.177.243.247 +119.36.60.253 +111.206.186.37 +183.253.58.253 +220.249.243.76 +113.16.208.143 +219.145.171.249 +59.56.28.244 +183.134.12.254 +60.222.200.71 +42.81.144.39 +106.120.178.253 +221.230.141.174 +218.21.175.24 +182.108.171.150 +183.56.172.34 +183.236.28.151 +123.138.203.21 +61.160.209.254 +182.108.171.251 +223.111.18.161 +113.142.88.31 +111.161.122.100 +61.147.226.185 +36.156.73.220 +122.228.24.173 +123.183.164.141 +182.34.127.48 +182.140.236.124 +113.5.80.102 +122.136.46.66 +60.210.21.89 +36.102.230.22 +218.60.185.248 +118.123.233.252 +223.111.18.162 +157.255.76.48 +119.36.91.138 +202.98.156.253 +153.99.174.201 +60.213.21.214 +36.102.230.21 +221.230.141.171 +60.210.23.175 +60.213.21.252 +36.25.241.250 +182.108.171.149 +61.136.107.57 +111.8.9.197 +121.11.81.226 +61.132.238.126 +58.220.220.252 +59.83.211.215 +117.21.217.98 +223.111.18.163 +114.112.160.253 +221.180.208.190 +112.123.33.18 +218.12.228.38 +124.236.28.254 +223.111.156.216 +106.120.178.22 +113.207.77.121 +58.216.21.22 +59.83.228.160 +111.161.22.62 +117.174.21.238 +112.240.60.172 +117.161.19.126 +150.138.111.251 +117.21.217.26 +58.51.168.127 +110.19.204.253 +183.62.114.154 +218.78.185.251 +123.183.164.251 +59.49.89.100 +59.44.25.8 +221.180.192.131 +183.240.52.108 +113.16.208.251 +60.174.243.166 +111.47.220.238 +112.90.135.99 +112.47.27.172 +218.12.228.221 +221.180.208.50 +180.95.178.250 +36.25.241.77 +182.201.212.79 +125.66.85.31 +36.25.241.75 +125.66.85.108 +221.235.187.132 +36.25.241.76 +125.66.85.30 +111.44.244.52 +124.167.218.116 +123.183.164.35 +58.223.164.229 +36.104.132.49 +221.235.187.66 +122.70.142.252 +221.235.187.131 +221.235.187.129 +121.46.248.79 +112.25.35.78 +112.17.29.230 +36.102.230.253 +211.144.81.20 +111.63.72.126 +58.220.71.64 +182.242.50.245 +175.43.20.118 +150.138.167.234 +223.113.14.126 +61.149.22.254 +183.62.114.195 +124.167.218.251 +122.228.233.208 +117.176.232.253 +45.124.125.104 +36.25.241.249 +106.57.180.253 +122.136.46.126 +221.230.141.224 +112.17.27.251 +183.66.109.253 +111.0.22.116 +118.123.251.254 +112.29.227.250 +153.99.235.217 +118.212.138.215 +183.214.132.106 +122.70.142.147 +218.76.105.252 +221.178.0.252 +112.29.203.244 +182.108.171.250 +112.17.27.254 +111.26.107.19 +111.19.233.252 +221.15.67.231 +111.6.176.248 +153.99.174.212 +221.15.67.234 +117.157.20.99 +221.235.187.220 +111.40.183.249 +59.56.30.250 +125.64.102.254 +60.18.86.253 +119.36.91.182 +222.20.147.174 +111.161.22.17 +183.66.109.51 +112.90.135.240 +123.138.203.115 +222.186.141.186 +58.20.179.253 +124.167.218.28 +116.77.73.165 +115.231.20.54 +36.159.115.250 +122.228.233.182 +111.19.233.145 +112.240.60.72 +122.70.142.148 +117.176.232.96 +223.113.14.97 +59.56.30.62 +111.6.176.138 +182.242.50.166 +218.76.105.50 +60.18.86.61 +180.169.63.51 +119.36.91.135 +110.242.21.78 +180.169.63.52 +183.62.114.189 +42.123.117.51 +114.112.160.201 +182.108.171.36 +118.212.138.51 +218.242.102.151 +150.138.167.191 +58.251.112.83 +58.251.112.39 +125.64.102.193 +58.251.111.102 +221.230.141.51 +125.39.1.191 +163.177.89.154 +222.20.147.189 +182.136.72.131 +203.208.40.127 +123.138.203.32 +122.136.46.91 +60.174.241.125 +61.149.22.105 +61.163.111.73 +211.144.81.22 +60.220.196.235 +113.142.88.21 +218.14.200.254 +59.34.229.254 +211.144.81.24 +42.81.144.191 +60.174.241.96 +60.174.241.97 +112.17.27.7 +113.142.88.253 +183.56.172.35 +59.34.229.252 +175.43.20.70 +211.138.60.159 +112.25.81.67 +120.241.57.30 +60.174.241.120 +223.86.219.254 +36.102.230.162 +59.63.221.250 +120.241.57.252 +123.138.203.20 +117.161.66.88 +14.204.74.76 +42.81.144.23 +113.16.212.21 +111.40.183.212 +115.54.16.152 +218.12.228.85 +112.51.125.242 +111.32.1.230 +183.222.97.246 +222.218.87.247 +117.180.229.254 +110.96.40.225 +61.147.210.151 +112.30.198.110 +211.162.1.168 +183.56.168.252 +101.226.18.72 +101.226.18.29 +222.218.87.28 +112.16.227.254 +218.12.228.126 +60.9.0.254 +101.69.104.74 +101.69.104.20 +163.177.90.84 +182.136.72.130 +222.141.84.250 +222.141.84.253 +153.101.208.90 +222.186.145.87 +222.44.151.25 +125.66.85.64 +125.42.203.63 +125.42.203.42 +180.97.178.228 +36.250.248.216 +175.154.186.78 +222.52.39.39 +172.217.24.46 +183.240.52.131 +61.162.100.36 +180.97.178.231 +116.77.75.185 +111.0.23.139 +58.20.179.8 +221.180.192.235 +112.29.227.85 +221.180.192.49 +61.184.117.27 +222.218.87.27 +202.114.51.35 +222.186.145.86 +112.51.125.243 +203.208.40.36 +182.34.127.24 +111.32.1.247 +222.44.151.24 +14.204.74.73 +36.25.241.86 +101.246.182.209 +106.57.180.96 +61.184.117.23 +222.44.151.191 +111.32.1.206 +114.236.140.253 +211.162.189.223 +125.64.102.70 +124.14.2.75 +112.240.60.75 +211.162.212.246 +175.188.163.55 +101.69.104.63 +222.44.151.67 +180.163.150.251 +123.138.157.93 +36.159.115.121 +221.230.141.170 +222.186.145.84 +49.210.3.160 +183.240.52.106 +60.207.246.98 +124.202.166.57 +153.99.174.202 +120.206.189.253 +114.113.88.123 +124.14.17.222 +113.215.16.247 +219.238.2.185 +114.113.88.72 +113.215.224.9 +27.36.62.28 +111.47.220.239 +222.218.87.26 +113.215.16.188 +202.122.145.214 +210.66.46.19 +61.90.241.26 +113.21.242.153 +8.37.236.5 +111.238.60.144 +3.0.1.32 +180.180.248.185 +202.122.145.86 +8.37.232.2 +8.37.236.4 +8.37.232.5 +8.37.232.3 +8.37.232.4 +8.37.236.2 +113.215.16.139 +139.129.16.1 +111.11.31.90 +202.120.1.62 +113.215.12.229 +43.226.162.63 +113.215.12.181 +103.215.29.56 +113.16.209.171 +58.216.21.21 +222.243.141.217 +222.245.77.74 +125.89.198.81 +182.140.147.77 +218.87.111.64 +180.88.60.134 +61.167.54.109 +117.187.19.19 +60.174.241.29 +43.240.1.57 +183.57.28.61 +61.188.191.218 +118.180.15.113 +118.180.15.71 +121.18.230.47 +123.138.157.109 +183.134.9.58 +123.138.60.146 +111.178.233.87 +116.224.87.45 +61.188.191.20 +122.70.142.143 +124.164.8.65 +183.134.10.85 +60.9.1.129 +27.148.151.214 +221.230.141.78 +122.225.28.145 +112.84.104.48 +220.202.77.119 +125.90.204.32 +123.138.60.143 +122.70.142.144 +180.97.247.157 +115.231.171.14 +117.187.19.164 +117.27.245.62 +110.157.233.30 +61.167.54.108 +182.140.147.63 +117.187.19.45 +61.188.191.21 +218.92.220.55 +222.211.64.51 +182.140.147.61 +222.211.64.89 +58.50.31.33 +111.20.250.62 +115.153.176.80 +117.23.2.86 +61.188.191.216 +182.140.218.64 +110.18.244.141 +101.69.104.73 +220.165.142.40 +122.70.142.142 +49.79.232.225 +61.188.191.28 +220.249.243.84 +113.107.112.168 +182.140.147.58 +182.140.147.76 +180.97.180.44 +115.231.171.13 +182.140.147.81 +60.222.221.59 +218.92.227.121 +175.154.189.30 +61.188.191.26 +113.5.80.93 +175.43.124.195 +103.37.173.34 +117.187.19.18 +115.231.22.34 +220.194.200.179 +220.165.142.38 +60.220.194.210 +121.18.230.43 +183.214.133.48 +113.107.57.43 +171.217.254.68 +106.3.62.211 +115.57.125.79 +222.138.255.18 +58.222.19.50 +58.222.19.52 +122.228.233.209 +117.27.241.99 +218.92.220.16 +218.7.220.14 +175.43.124.143 +91.189.92.20 +110.18.244.142 +106.3.62.198 +91.189.92.38 +175.43.20.56 +110.18.246.10 +117.23.6.81 +219.146.68.84 +218.92.220.78 +61.188.191.29 +110.18.244.137 +116.211.79.31 +180.97.180.47 +183.224.12.87 +36.250.87.27 +220.165.142.39 +222.245.77.22 +61.188.191.19 +14.215.100.95 +175.43.20.58 +218.92.220.14 +60.222.221.66 +221.235.187.64 +60.222.221.65 +60.223.235.142 +218.92.220.17 +58.218.208.199 +211.97.73.244 +110.157.233.34 +117.187.19.17 +61.188.191.84 +117.27.245.85 +182.106.194.107 +42.81.28.74 +112.65.220.227 +150.138.214.95 +61.54.219.75 +59.49.42.253 +182.140.147.80 +182.140.147.59 +118.212.138.181 +125.90.204.34 +183.134.9.59 +101.66.224.145 +113.5.80.100 +183.131.192.83 +175.43.124.145 +124.116.133.50 +112.25.35.52 +182.243.62.48 +220.165.142.35 +115.231.171.70 +123.138.60.147 +116.55.236.37 +188.138.33.149 +223.111.18.217 +115.231.171.15 +219.146.68.79 +61.188.191.30 +110.18.244.14 +60.13.41.74 +60.220.194.208 +218.60.109.74 +218.75.225.192 +218.92.209.74 +183.134.11.90 +61.54.219.38 +112.25.55.143 +218.26.75.207 +202.118.10.115 +125.39.1.138 +219.146.68.78 +61.188.191.27 +211.162.48.54 +211.91.168.40 +58.222.19.51 +110.18.244.140 +121.251.255.237 +110.53.72.58 +61.54.219.43 +117.27.245.75 +221.203.4.70 +111.62.244.177 +182.140.147.78 +27.148.163.158 +182.140.218.63 +121.251.255.226 +182.140.147.60 +182.140.147.104 +116.55.236.36 +218.60.51.254 +101.70.152.37 +113.200.235.16 +59.56.30.206 +115.231.22.80 +113.16.210.132 +58.216.21.24 +115.57.125.78 +125.90.204.31 +221.229.167.47 +110.18.244.138 +111.161.120.199 +182.34.127.94 +117.27.245.87 +125.75.34.27 +221.229.202.154 +59.56.30.221 +58.216.21.93 +36.250.248.68 +106.3.62.194 +115.57.125.106 +220.194.200.180 +183.224.12.27 +115.153.176.78 +125.64.134.78 +115.156.188.138 +60.174.241.30 +61.188.191.215 +123.138.60.145 +60.5.254.10 +125.90.204.122 +113.107.112.167 +61.184.117.53 +36.250.87.94 +60.211.208.49 +115.231.22.33 +118.180.15.110 +211.138.60.136 +117.145.179.175 +218.26.75.208 +58.222.19.54 +61.167.54.239 +121.18.168.150 +61.147.211.20 +121.18.230.46 +61.188.191.22 +222.211.64.92 +59.56.26.49 +125.90.204.33 +113.107.44.234 +115.231.171.17 +115.231.22.31 +59.49.42.252 +111.8.9.204 +122.138.54.176 +211.161.83.41 +150.138.214.83 +115.231.22.32 +218.60.109.75 +182.140.147.62 +175.43.20.60 +220.165.142.37 +36.250.87.26 +218.92.220.15 +61.188.191.217 +58.222.19.61 +221.229.167.36 +202.98.156.62 +116.55.236.35 +60.223.235.137 +61.167.54.236 +220.194.200.178 +220.165.142.36 +182.201.212.197 +61.138.219.85 +183.58.18.36 +150.138.168.115 +60.217.22.146 +58.221.78.105 +111.23.11.52 +182.140.236.27 +175.43.20.57 +112.25.83.174 +113.5.80.125 +113.207.72.67 +220.194.200.232 +121.30.196.117 +110.157.233.33 +116.55.236.39 +58.223.164.87 +111.6.192.131 +121.18.230.44 +121.251.255.227 +111.11.31.114 +61.167.54.240 +59.56.30.207 +218.29.50.48 +175.43.124.142 +211.94.114.66 +112.29.203.246 +111.62.244.178 +61.54.219.39 +36.42.32.254 +211.142.194.166 +182.140.236.28 +58.20.197.62 +61.138.219.7 +182.140.147.106 +112.25.35.54 +59.56.26.33 +182.140.147.79 +211.142.194.72 +117.23.51.76 +211.142.194.185 +122.138.54.177 +175.43.20.81 +211.142.194.7 +60.222.221.62 +117.27.245.89 +36.250.74.83 +123.183.164.136 +121.18.230.86 +125.90.206.144 +121.18.230.42 +14.21.78.136 +106.41.0.37 +60.174.241.26 +211.142.194.69 +120.221.24.123 +211.142.194.28 +221.229.167.32 +220.194.203.66 +221.229.167.31 +60.174.241.31 +121.30.196.116 +117.27.245.90 +211.142.194.88 +163.177.243.251 +117.27.245.88 +222.163.202.216 +61.156.243.247 +211.142.194.9 +118.212.138.52 +218.76.105.168 +112.90.212.126 +58.222.19.53 +211.142.194.68 +61.167.54.238 +211.142.194.163 +183.56.172.114 +117.187.19.46 +183.131.168.145 +36.250.248.66 +211.142.194.164 +61.138.219.8 +58.222.42.9 +60.174.241.28 +117.21.168.87 +64.233.189.188 +122.228.233.206 +115.231.20.39 +58.51.241.34 +211.142.194.167 +111.11.197.55 +220.165.142.51 +115.156.188.183 +120.221.25.195 +58.20.179.92 +218.29.49.71 +221.182.135.179 +218.60.51.253 +122.143.27.169 +58.216.109.186 +61.167.54.237 +125.75.32.252 +113.107.112.135 +117.27.241.176 +211.142.194.71 +59.63.205.232 +118.180.15.94 +116.55.236.45 +60.28.100.38 +110.157.233.35 +61.188.191.85 +112.25.35.55 +112.29.201.149 +112.17.26.100 +117.23.2.85 +113.207.83.12 +43.242.182.41 +123.128.14.223 +175.43.124.146 +60.223.235.140 +58.63.233.35 +211.142.194.67 +150.138.169.233 +117.187.19.16 +211.138.60.135 +113.107.112.214 +222.89.68.50 +219.147.233.232 +182.140.130.25 +218.77.2.32 +115.153.176.66 +221.182.135.156 +112.84.104.148 +116.211.251.37 +61.138.219.87 +61.54.219.34 +111.161.22.27 +59.63.244.219 +117.21.204.77 +106.120.178.48 +59.45.42.44 +183.134.12.69 +61.138.219.6 +175.43.124.144 +117.169.17.6 +221.229.202.149 +182.132.33.24 +120.192.199.12 +118.180.15.72 +58.216.21.23 +58.20.164.51 +183.95.189.36 +112.90.246.87 +180.97.180.16 +211.142.194.70 +119.84.111.48 +123.161.57.38 +218.75.225.80 +222.243.110.146 +121.18.230.45 +222.23.55.114 +36.250.76.34 +218.60.106.91 +113.200.235.17 +116.55.236.38 +220.162.97.242 +222.163.201.28 +61.138.219.10 +222.163.201.27 +150.138.167.169 +59.56.26.37 +59.50.75.195 +121.192.176.198 +218.60.106.25 +119.90.19.39 +115.231.84.169 +119.84.111.126 +222.23.55.228 +120.192.199.4 +106.122.250.198 +61.174.63.234 +222.186.132.123 +124.228.90.88 +60.174.241.25 +220.162.97.245 +223.111.16.239 +120.221.66.189 +115.156.188.137 +125.90.204.117 +115.156.188.182 +123.138.60.192 +218.76.105.75 +220.162.97.243 +182.132.33.22 +218.21.175.194 +218.77.2.83 +222.186.17.100 +218.12.228.248 +61.174.63.203 +162.105.28.232 +182.132.33.25 +223.111.13.62 +180.97.178.210 +222.243.110.147 +218.12.228.212 +112.25.35.53 +219.144.78.197 +120.221.64.229 +119.84.111.44 +36.250.76.37 +60.223.208.78 +222.243.110.148 +61.163.117.65 +36.250.87.30 +118.122.87.99 +218.58.222.20 +183.131.168.154 +121.31.23.53 +124.165.216.184 +60.215.125.71 +183.136.217.75 +117.169.17.8 +58.51.150.55 +220.194.200.234 +218.197.116.213 +115.231.82.60 +58.222.19.59 +14.215.100.94 +203.208.40.71 +219.243.47.166 +61.174.63.205 +218.86.111.69 +119.90.19.40 +115.231.84.62 +175.43.124.141 +222.23.55.115 +122.70.142.145 +115.231.82.101 +119.84.86.112 +115.231.82.58 +122.70.142.160 +61.174.63.232 +61.54.219.8 +115.231.82.62 +119.84.111.47 +110.18.247.40 +218.12.228.213 +117.169.17.46 +114.80.143.144 +121.18.168.211 +112.25.35.79 +119.84.111.41 +111.1.59.93 +111.8.9.209 +103.37.173.36 +112.253.19.164 +210.52.224.11 +112.65.220.39 +112.253.19.161 +59.56.26.35 +221.179.172.161 +112.253.19.160 +101.227.66.150 +14.215.9.64 +222.23.55.208 +183.136.217.73 +61.174.63.200 +113.5.80.90 +113.5.170.35 +162.105.28.233 +59.56.26.34 +175.25.168.40 +119.84.111.42 +119.84.111.49 +117.145.179.96 +124.165.204.43 +61.174.63.204 +112.25.35.56 +114.64.222.62 +116.57.77.39 +111.40.195.169 +115.231.84.64 +111.26.17.169 +113.207.69.18 +112.35.15.233 +117.169.17.45 +101.227.102.198 +112.253.19.162 +182.132.33.26 +60.213.21.210 +222.186.132.68 +115.231.171.16 +220.162.97.136 +112.25.35.61 +113.207.69.16 +163.177.151.110 +203.208.40.65 +163.177.151.109 +203.208.41.94 +216.58.220.206 +192.243.53.240 +216.58.199.14 +113.207.69.17 +31.13.68.1 +144.2.3.1 +163.177.89.163 +8.7.198.45 +58.250.137.86 +54.71.116.25 +52.22.171.207 +115.231.84.65 +157.255.47.195 +163.177.8.31 +192.0.73.2 +61.138.219.9 +218.60.91.91 +203.208.40.63 +222.163.201.29 +182.132.33.21 +113.207.6.55 +101.227.66.152 +101.227.66.207 +113.107.44.248 +122.136.46.107 +117.169.17.7 +113.207.69.72 +110.18.247.41 +112.253.19.159 +111.26.17.170 +113.107.44.86 +111.11.152.225 +60.211.208.217 +112.91.129.179 +58.221.78.39 +125.74.38.251 +58.220.44.167 +58.222.46.30 +117.156.21.51 +222.218.45.216 +123.183.164.40 +218.7.220.16 +221.179.172.204 +112.90.135.91 +36.104.132.151 +113.107.44.105 +211.144.7.86 +113.107.44.106 +58.216.109.91 +123.183.164.75 +61.147.226.152 +36.250.74.35 +59.56.26.36 +183.56.172.124 +202.120.1.32 +124.236.97.56 +219.146.158.202 +60.213.21.211 +117.144.228.170 +112.65.220.20 +117.146.64.156 +218.197.116.214 +118.180.15.69 +34.233.67.34 +74.86.151.162 +36.250.76.204 +174.36.196.242 +58.215.134.237 +103.254.188.39 +180.97.180.45 +113.207.72.20 +222.132.5.100 +36.250.76.35 +119.84.111.45 +111.26.136.222 +222.89.68.51 +60.8.123.158 +59.44.30.44 +119.84.111.113 +119.84.94.140 +220.194.200.177 +42.54.0.42 +218.199.110.85 +60.13.41.78 +222.245.77.19 +221.229.167.35 +125.44.96.185 +14.215.9.83 +183.134.11.91 +120.192.199.3 +112.253.19.196 +59.47.79.43 +222.163.201.30 +222.245.77.21 +218.60.132.160 +112.65.220.18 +101.227.66.151 +202.194.19.5 +202.201.14.181 +120.192.199.13 +218.58.222.15 +220.162.97.241 +218.76.94.67 +61.240.156.54 +120.192.199.26 +220.162.97.246 +115.231.82.59 +36.42.32.68 +52.71.148.54 +67.228.74.123 +172.217.161.142 +31.13.65.17 +203.208.40.62 +185.63.145.1 +59.24.3.173 +62.4.15.84 +203.208.41.64 +108.177.97.188 +172.217.31.238 +144.76.100.52 +216.58.221.142 +121.11.81.101 +183.47.216.19 +218.14.200.57 +183.47.216.35 +14.17.80.77 +115.223.7.173 +183.47.216.18 +183.47.216.36 +183.222.97.135 +58.220.71.62 +103.254.188.40 +111.206.186.42 +117.148.128.254 +103.254.188.216 +112.240.60.252 +183.236.28.251 +101.66.224.248 +183.62.114.157 +58.223.164.231 +111.161.22.18 +183.222.101.236 +36.25.241.156 +14.18.17.241 +222.186.145.101 +111.161.22.19 +61.149.9.136 +27.195.145.62 +61.188.191.34 +125.90.206.79 +122.70.142.175 +117.145.179.20 +125.90.206.78 +183.47.216.20 +183.236.28.121 +110.18.244.134 +117.169.93.85 +14.17.80.67 +14.17.80.84 +114.112.172.53 +60.220.196.223 +123.53.139.36 +182.140.218.24 +114.112.172.54 +219.138.186.44 +14.17.80.79 +117.149.154.188 +116.77.75.133 +14.17.80.73 +118.123.237.27 +14.17.80.70 +118.123.237.29 +120.198.197.88 +101.226.18.32 +36.250.248.25 +42.81.144.54 +121.11.81.102 +36.250.248.56 +59.34.229.55 +218.14.200.56 +58.223.166.118 +59.34.229.59 +124.236.28.95 +114.112.172.57 +112.240.60.210 +111.19.233.99 +183.134.53.155 +114.112.172.59 +221.235.187.56 +14.0.45.164 +59.80.28.58 +183.47.216.37 +14.17.80.82 +61.184.117.30 +120.226.48.27 +61.147.228.89 +111.161.122.135 +59.34.229.62 +219.138.27.30 +14.17.80.68 +114.112.172.56 +183.131.169.225 +183.134.53.153 +61.132.238.92 +221.235.187.90 +218.242.102.131 +14.17.80.75 +219.138.27.31 +42.81.144.56 +183.236.28.123 +117.174.21.130 +36.104.132.48 +61.136.167.20 +122.224.186.225 +124.116.133.20 +61.162.100.41 +61.136.167.18 +112.30.197.17 +122.224.186.226 +122.225.28.160 +114.112.172.52 +124.236.97.45 +58.223.166.122 +123.53.139.39 +14.17.80.76 +223.111.19.81 +223.111.19.91 +58.216.109.95 +125.90.206.76 +180.163.150.115 +42.81.144.53 +42.123.117.23 +223.111.196.49 +123.128.14.71 +222.186.141.142 +153.101.208.93 +14.17.80.71 +59.83.228.89 +42.81.144.55 +120.198.197.87 +218.58.206.57 +61.167.54.26 +117.149.154.187 +111.6.177.215 +117.169.93.86 +14.17.80.69 +112.51.125.62 +222.138.255.46 +117.27.245.52 +180.97.178.146 +113.207.81.76 +121.11.81.104 +183.214.1.32 +183.236.28.122 +221.235.187.119 +116.77.75.146 +121.11.81.100 +125.77.147.67 +59.83.228.88 +218.76.129.173 +180.97.178.166 +116.77.75.183 +218.76.129.176 +112.90.135.97 +182.140.218.23 +101.226.18.30 +125.90.206.43 +14.21.78.46 +61.156.243.111 +61.156.243.110 +61.156.243.112 +61.156.243.109 +61.156.243.108 +112.47.14.199 +112.47.14.198 +112.47.14.200 +112.47.14.201 +222.74.113.225 +222.74.113.229 +222.74.113.219 +222.74.113.228 +222.74.113.231 +112.47.27.131 +222.74.113.218 +112.47.27.132 +221.180.218.74 +221.180.218.73 +60.213.22.34 +60.213.21.156 +60.213.21.117 +60.213.21.118 +60.213.21.157 +112.51.121.108 +112.30.197.16 +112.51.121.107 +111.19.215.39 +111.19.215.40 +14.18.17.20 +111.178.233.221 +14.18.17.27 +111.178.233.220 +163.177.132.27 +163.177.132.30 +163.177.132.28 +163.177.132.31 +27.148.151.176 +27.148.151.179 +27.148.151.178 +27.148.151.174 +27.148.151.180 +27.148.151.175 +27.148.151.177 +27.148.151.72 +122.225.28.159 +122.225.28.161 +122.225.28.163 +219.147.92.217 +219.220.29.189 +119.44.24.30 +219.220.29.182 +219.220.29.175 +219.220.29.177 +219.220.29.190 +125.75.35.173 +125.75.35.190 +125.75.35.189 +211.162.212.213 +216.58.203.46 +106.15.25.58 +122.70.142.172 +216.58.203.14 +203.208.41.57 +113.104.14.28 +117.148.128.93 +61.145.100.27 +42.81.144.180 +153.101.208.92 +112.84.104.162 +111.6.176.97 +14.21.78.44 +114.113.88.89 +114.112.160.124 +157.255.76.25 +114.112.172.55 +52.175.39.99 +61.145.100.20 +203.208.41.90 +218.58.206.37 +61.145.100.15 +61.147.228.117 +58.20.179.74 +123.183.164.79 +103.254.189.230 +121.11.81.103 +58.20.179.73 +61.145.100.44 +222.35.78.33 +111.13.100.91 +60.9.0.16 +221.179.183.53 +111.13.100.92 +125.77.130.48 +183.201.225.73 +39.96.132.69 +112.29.158.133 +47.95.47.253 +111.63.49.196 +117.122.217.89 +140.143.52.226 +101.201.173.208 +61.149.22.35 +58.216.109.108 +36.25.241.40 +221.235.187.65 +114.112.172.60 +113.215.12.231 +120.241.57.48 +14.21.78.48 +114.112.160.123 +112.17.53.97 +112.25.81.69 +36.250.233.210 +36.25.241.39 +180.169.63.59 +114.112.172.61 +111.63.49.197 +122.224.186.221 +125.90.206.241 +202.198.17.207 +113.104.14.27 +60.9.0.14 +115.223.7.128 +163.177.243.10 +218.78.185.34 +60.9.0.20 +218.75.154.94 +101.69.146.31 +182.201.212.141 +61.145.100.33 +61.157.124.38 +61.149.9.170 +157.255.76.30 +125.77.130.46 +58.220.71.67 +61.145.100.45 +61.147.226.47 +58.220.71.51 +125.77.147.63 +61.160.209.96 +122.224.186.223 +112.90.135.93 +114.112.172.58 +14.21.78.43 +182.108.171.171 +113.104.14.32 +101.227.99.21 +114.113.88.88 +61.145.100.17 +183.66.109.38 +140.143.49.61 +115.223.7.127 +61.147.228.115 +61.145.100.30 +218.60.185.103 +14.17.80.72 +113.104.14.29 +42.81.144.179 +125.90.206.242 +42.81.144.31 +112.29.227.45 +120.204.10.176 +58.220.220.118 +101.69.146.32 +153.101.208.91 +125.90.206.42 +61.136.107.46 +61.136.167.19 +58.216.109.96 +36.250.248.217 +61.147.227.55 +203.208.40.58 +123.183.164.80 +36.250.233.211 +111.62.92.60 +61.147.227.53 +122.228.24.105 +120.241.57.161 +223.113.14.215 +112.240.60.212 +61.147.227.54 +101.69.146.33 +125.90.206.246 +113.104.14.24 +180.97.178.141 +101.227.99.22 +223.113.14.17 +60.9.0.21 +61.149.22.34 +112.16.227.101 +117.148.128.97 +120.226.49.146 +218.58.206.49 +219.138.186.43 +123.183.164.92 +122.224.186.222 +112.29.227.107 +218.58.206.53 +61.132.238.91 +124.236.28.94 +14.17.80.74 +222.186.145.85 +120.221.64.54 +117.149.155.148 +60.210.21.85 +59.80.29.30 +101.69.146.30 +122.224.186.227 +112.90.135.98 +182.140.236.57 +58.223.164.234 +124.236.28.100 +163.177.243.240 +183.134.53.157 +60.210.23.26 +117.161.19.22 +59.49.89.45 +113.104.14.23 +61.147.228.60 +114.113.88.84 +123.125.50.4 +125.90.206.243 +58.223.166.119 +124.236.28.98 +120.241.57.92 +122.224.186.224 +124.236.28.92 +118.123.233.15 +123.128.14.70 +36.102.230.137 +150.138.111.33 +112.84.104.163 +218.58.206.46 +117.27.241.113 +114.236.88.46 +183.214.1.30 +115.223.7.174 +183.236.28.124 +218.78.185.35 +58.220.220.117 +120.241.57.57 +61.160.209.26 +180.169.63.60 +203.208.40.45 +218.242.102.139 +124.116.133.19 +183.131.124.38 +125.77.147.68 +124.116.133.15 +180.97.178.142 +218.12.228.40 +36.250.248.219 +36.102.230.138 +36.102.230.136 +183.236.28.25 +112.47.20.77 +223.111.156.176 +183.134.12.26 +122.70.142.176 +14.17.80.80 +113.104.14.31 +112.17.53.98 +117.148.128.98 +113.104.14.30 +124.236.28.96 +123.53.139.38 +61.147.226.46 +58.216.109.106 +58.220.71.66 +113.104.14.26 +182.140.236.58 +221.235.187.106 +125.90.206.244 +115.223.7.126 +36.250.248.24 +61.149.9.150 +223.111.156.173 +125.90.206.240 +119.176.61.23 +61.147.228.61 +117.161.66.72 +183.236.28.116 +61.157.124.42 +219.138.186.42 +36.159.115.88 +36.250.248.221 +60.9.0.18 +111.6.176.94 +183.134.12.27 +39.130.253.45 +58.51.168.74 +120.221.23.62 +218.58.206.41 +182.108.171.172 +120.226.48.25 +221.235.187.98 +122.228.24.103 +120.220.18.113 +61.147.226.48 +117.161.66.71 +153.101.208.89 +36.156.73.145 +218.58.206.43 +60.213.21.245 +219.138.186.41 +36.250.248.222 +222.138.255.45 +116.207.132.181 +58.220.71.65 +183.201.225.74 +223.111.156.175 +223.111.156.188 +124.236.28.91 +36.25.241.41 +101.69.146.35 +122.228.24.106 +221.235.187.133 +61.243.144.141 +61.132.238.93 +123.183.164.82 +223.113.14.16 +221.180.208.46 +61.160.209.98 +60.174.243.156 +118.123.237.28 +221.180.192.61 +122.228.24.107 +111.62.92.59 +223.111.203.36 +120.206.189.53 +183.222.97.165 +124.116.133.77 +59.63.241.84 +117.27.241.76 +112.240.60.208 +61.147.228.116 +101.69.146.34 +182.108.171.170 +123.183.164.96 +182.242.50.46 +59.63.241.82 +58.223.166.121 +115.223.7.176 +61.157.124.48 +117.149.155.147 +182.201.212.142 +117.27.241.112 +61.132.238.94 +58.216.109.99 +183.216.176.65 +183.222.97.164 +219.147.93.105 +112.51.125.53 +111.19.215.41 +58.223.166.120 +58.51.168.206 +221.180.192.100 +36.156.73.146 +58.220.220.119 +36.250.248.218 +114.236.88.47 +183.214.1.227 +117.174.21.135 +218.75.154.89 +124.236.28.99 +61.157.124.40 +122.228.24.114 +36.250.233.212 +118.123.233.14 +60.210.21.88 +36.156.73.158 +219.157.114.150 +112.90.135.95 +122.228.237.74 +223.111.156.202 +59.63.241.83 +60.9.0.19 +123.128.14.69 +36.250.233.214 +223.111.19.90 +59.49.89.69 +112.16.227.103 +118.118.216.130 +119.36.60.29 +125.77.130.49 +61.147.228.118 +183.134.12.28 +112.28.196.53 +60.255.160.110 +120.41.4.189 +112.34.111.26 +112.34.111.235 +221.179.183.35 +112.34.112.78 +39.130.253.52 +58.220.220.114 +119.176.61.26 +120.206.189.52 +117.27.241.126 +221.181.72.244 +117.161.13.223 +120.221.224.232 +222.35.78.49 +111.63.56.210 +221.181.72.231 +111.13.101.192 +117.131.213.100 +120.221.224.233 +120.221.223.236 +111.63.49.195 +222.35.78.48 +111.32.132.45 +222.35.78.34 +111.32.130.98 +117.27.241.125 +122.228.237.76 +61.147.227.126 +183.134.53.223 +58.223.166.116 +60.213.21.244 +112.240.60.211 +125.77.130.44 +183.214.140.204 +221.235.187.121 +117.27.243.113 +47.95.50.136 +203.208.40.57 +221.181.72.150 +101.201.174.163 +203.208.41.75 +203.208.40.111 +52.114.74.45 +61.184.117.33 +123.128.14.68 +58.216.109.97 +36.102.230.20 +112.51.125.73 +124.236.28.93 +218.76.129.174 +223.111.196.48 +113.104.14.25 +114.236.88.48 +218.58.206.40 +125.90.206.245 +113.207.81.81 +36.156.73.157 +125.77.147.69 +113.104.14.33 +110.19.204.219 +113.104.14.34 +58.223.166.117 +125.77.147.80 +183.214.140.203 +163.177.132.29 +8.8.8.8 +60.9.0.22 +59.63.241.81 +61.157.124.47 +120.226.48.28 +52.22.174.247 +219.157.114.149 +111.40.183.55 +111.6.176.95 +61.136.167.21 +120.226.49.80 +120.226.49.81 +59.44.30.27 +27.195.145.123 +125.77.130.47 +111.19.233.59 +119.36.60.30 +223.111.156.174 +112.16.227.104 +61.184.117.31 +114.113.88.85 +183.134.53.156 +124.236.97.39 +117.23.2.30 +36.250.248.220 +58.51.168.65 +61.243.144.142 +202.98.156.61 +112.51.125.54 +115.223.24.81 +219.138.27.28 +60.210.21.87 +59.80.29.22 +125.77.147.62 +221.180.208.47 +111.41.54.80 +118.212.138.107 +115.223.7.125 +14.204.74.95 +183.216.176.64 +60.210.23.29 +112.240.60.213 +36.250.248.55 +183.134.53.158 +60.213.21.243 +125.74.58.136 +59.44.25.58 +120.226.49.83 +111.6.177.216 +112.51.125.65 +112.16.227.102 +219.157.114.73 +111.62.92.61 +114.236.88.45 +60.210.23.178 +119.36.91.139 +101.246.182.214 +223.111.203.35 +61.147.228.78 +58.51.168.62 +112.28.196.75 +218.92.209.42 +59.80.29.33 +113.16.208.77 +60.174.243.155 +219.232.81.226 +203.208.41.77 +203.208.41.89 +125.77.147.83 +120.226.49.82 +60.9.0.23 +219.138.27.108 +115.223.24.83 +180.97.178.163 +117.161.19.19 +42.176.192.76 +120.226.48.26 +183.253.58.102 +125.74.58.138 +60.174.243.157 +123.53.139.37 +183.216.176.83 +125.77.147.66 +124.165.125.126 +219.138.27.107 +218.58.206.39 +112.240.60.209 +58.51.168.63 +42.176.192.78 +221.180.192.39 +112.47.20.68 +218.60.185.100 +60.210.21.86 +111.40.183.56 +124.236.28.97 +124.116.133.17 +59.80.29.20 +112.47.20.79 +117.149.154.186 +101.246.182.160 +183.216.176.63 +115.223.7.175 +61.184.117.32 +61.136.167.17 +111.62.92.55 +125.77.147.82 +117.23.2.29 +223.119.155.107 +123.128.14.72 +112.28.196.74 +123.128.14.49 +112.29.227.102 +123.183.164.99 +203.208.41.33 +124.236.97.38 +36.250.248.210 +221.180.208.48 +120.221.64.53 +59.63.241.85 +58.51.168.64 +122.228.237.75 +114.113.88.87 +218.12.228.39 +111.19.233.60 +112.47.20.88 +111.19.233.87 +111.41.54.102 +111.62.92.56 +111.41.54.103 +116.77.75.147 +60.9.0.17 +114.113.88.86 +111.62.69.243 +111.62.69.240 +111.13.105.106 +111.63.56.209 +180.95.178.38 +61.184.117.24 +183.222.97.163 +218.76.129.175 +222.138.255.47 +150.138.169.136 +60.18.86.101 +118.180.15.33 +218.60.185.102 +183.66.109.50 +120.221.23.64 +60.220.196.221 +61.136.107.45 +125.77.147.88 +117.27.241.111 +113.215.12.234 +60.210.23.25 +61.136.167.22 +36.250.248.27 +202.98.156.60 +120.220.18.112 +112.51.125.74 +120.221.64.161 +112.51.125.33 +113.16.208.233 +120.221.23.63 +39.130.253.227 +112.29.227.106 +113.207.81.77 +27.195.145.61 +60.210.23.23 +218.60.185.47 +150.138.111.32 +157.255.76.52 +117.176.232.83 +61.188.191.81 +61.162.100.107 +125.74.58.135 +39.130.253.46 +61.188.191.83 +60.18.86.91 +115.223.7.123 +112.84.104.19 +116.77.75.170 +101.246.182.161 +124.165.125.134 +182.34.127.22 +125.74.58.137 +218.60.185.48 +101.246.182.219 +59.80.29.21 +218.60.185.46 +112.240.60.217 +39.130.253.53 +116.77.75.138 +182.140.236.133 +211.156.178.156 +211.156.178.154 +116.77.75.137 +117.145.179.22 +61.188.191.82 +60.210.23.177 +117.148.128.96 +60.174.241.88 +127.0.0.1 +112.28.196.54 +202.150.26.87 +52.114.158.91 +117.27.241.110 +218.78.185.210 +60.220.196.220 +59.44.30.25 +163.171.198.118 +59.44.30.121 +59.44.30.26 +120.221.64.55 +218.242.102.137 +112.240.59.151 +61.241.123.148 +112.240.58.253 +112.240.59.163 +113.142.90.226 +112.47.20.67 +183.222.97.166 +113.16.208.78 +124.116.133.18 +120.221.64.160 +202.98.156.59 +59.56.30.52 +223.113.14.216 +183.253.58.103 +117.27.241.213 +110.19.204.222 +60.220.196.222 +118.118.216.129 +110.19.204.220 +117.27.241.214 +39.130.253.226 +116.77.73.164 +223.113.14.214 +124.116.133.16 +183.253.58.76 +110.19.204.221 +111.40.183.65 +222.163.201.31 +113.207.0.17 +115.223.7.124 +222.186.141.141 +114.236.140.125 +218.242.102.138 +222.20.147.150 +113.142.90.236 +104.123.111.225 +222.186.141.135 +110.18.244.63 +113.142.90.235 +150.138.169.121 +58.63.233.27 +112.65.220.52 +59.81.64.188 +222.20.147.169 +222.186.141.143 +111.161.22.15 +222.186.141.132 +222.186.141.145 +14.0.42.133 +222.20.147.145 +113.104.14.229 +182.140.236.135 +182.140.236.138 +116.77.75.145 +61.147.226.49 +222.20.147.164 +222.20.147.184 +110.18.244.76 +117.27.241.218 +112.65.92.116 +52.114.128.43 diff --git a/main.py b/main.py index 1a750ce..e6f82e5 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ import sys from py12306.app import * +from py12306.helpers.cdn import Cdn from py12306.log.common_log import CommonLog from py12306.query.query import Query from py12306.user.user import User @@ -20,6 +21,7 @@ def main(): ####### 运行任务 Web.run() + Cdn.run() User.run() Query.run() if not Const.IS_TEST: diff --git a/py12306/cluster/cluster.py b/py12306/cluster/cluster.py index 6d68d91..e8d8bdb 100644 --- a/py12306/cluster/cluster.py +++ b/py12306/cluster/cluster.py @@ -27,6 +27,9 @@ class Cluster(): KEY_USER_LAST_HEARTBEAT = KEY_PREFIX + 'user_last_heartbeat' KEY_NODES_ALIVE = KEY_PREFIX + 'nodes_alive' + KEY_CDN_AVAILABLE_ITEMS = KEY_PREFIX + 'cdn_available_items' + KEY_CDN_LAST_CHECK_AT = KEY_PREFIX + 'cdn_last_check_at' + # 锁 KEY_LOCK_INIT_USER = KEY_PREFIX + 'lock_init_user' # 暂未使用 KEY_LOCK_DO_ORDER = KEY_PREFIX + 'lock_do_order' # 订单锁 diff --git a/py12306/config.py b/py12306/config.py index ad36ba8..4b95fc6 100644 --- a/py12306/config.py +++ b/py12306/config.py @@ -82,6 +82,11 @@ class Config: WEB_PORT = 8080 WEB_ENTER_HTML_PATH = PROJECT_DIR + 'py12306/web/static/index.html' + # CDN + CDN_ENABLED = 0 + CDN_ITEM_FILE = PROJECT_DIR + 'data/cdn.txt' + CDN_ENABLED_AVAILABLE_ITEM_FILE = QUERY_DATA_DIR + 'available.json' + envs = [] retry_time = 5 last_modify_time = 0 @@ -164,18 +169,22 @@ class Config: if envs == self.envs: return from py12306.query.query import Query from py12306.user.user import User + from py12306.helpers.cdn import Cdn + self.envs = envs for key, value in envs: if key in self.disallow_update_configs: continue if value != -1: old = getattr(self, key) setattr(self, key, value) - if not first: - if key == 'USER_ACCOUNTS' and old != value: + if not first and old != value: + if key == 'USER_ACCOUNTS': User().update_user_accounts(auto=True, old=old) - elif key == 'QUERY_JOBS' and old != value: + elif key == 'QUERY_JOBS': Query().update_query_jobs(auto=True) # 任务修改 - elif key == 'QUERY_INTERVAL' and old != value: + elif key == 'QUERY_INTERVAL': Query().update_query_interval(auto=True) + elif key == 'CDN_ENABLED': + Cdn().update_cdn_status(auto=True) @staticmethod def is_master(): # 是不是 主 @@ -190,20 +199,16 @@ class Config: def is_cluster_enabled(): return Config().CLUSTER_ENABLED - # @staticmethod - # def get_members(): - # members = [] - # for name, value in vars(Config).items(): - # if name.isupper(): - # members.append(([name, value])) - # return members + @staticmethod + def is_cdn_enabled(): + return Config().CDN_ENABLED class EnvLoader: envs = [] def __init__(self): - self.envs = [] # 不是单例不初始化怎么还会有值 + self.envs = [] @classmethod def load_with_file(cls, file): diff --git a/py12306/helpers/api.py b/py12306/helpers/api.py index 7b624ab..fa9e7d4 100644 --- a/py12306/helpers/api.py +++ b/py12306/helpers/api.py @@ -2,7 +2,8 @@ # 查询余票 import time -BASE_URL_OF_12306 = 'https://kyfw.12306.cn' +HOST_URL_OF_12306 = 'kyfw.12306.cn' +BASE_URL_OF_12306 = 'https://' + HOST_URL_OF_12306 LEFT_TICKETS = { "url": BASE_URL_OF_12306 + "/otn/{type}?leftTicketDTO.train_date={left_date}&leftTicketDTO.from_station={left_station}&leftTicketDTO.to_station={arrive_station}&purpose_codes=ADULT", @@ -46,3 +47,5 @@ API_NOTIFICATION_BY_VOICE_CODE = 'http://ali-voice.showapi.com/sendVoice?' API_FREE_CODE_QCR_API = 'http://60.205.200.159/api' API_FREE_CODE_QCR_API_CHECK = 'http://check.huochepiao.360.cn/img_vcode' + +API_CHECK_CDN_AVAILABLE = 'https://{}/otn/dynamicJs/omseuuq' diff --git a/py12306/helpers/cdn.py b/py12306/helpers/cdn.py new file mode 100644 index 0000000..8c1d5c6 --- /dev/null +++ b/py12306/helpers/cdn.py @@ -0,0 +1,231 @@ +import random +import json +from datetime import timedelta +from os import path + +from py12306.cluster.cluster import Cluster +from py12306.config import Config +from py12306.app import app_available_check +from py12306.helpers.api import API_CHECK_CDN_AVAILABLE, HOST_URL_OF_12306 +from py12306.helpers.func import * +from py12306.helpers.request import Request +from py12306.log.common_log import CommonLog + + +@singleton +class Cdn: + """ + CDN 管理 + """ + items = [] + available_items = [] + unavailable_items = [] + recheck_available_items = [] + recheck_unavailable_items = [] + retry_time = 3 + is_ready = False + is_finished = False + is_ready_num = 10 # 当可用超过 10,已准备好 + is_alive = True + is_recheck = False + + safe_stay_time = 0.2 + retry_num = 1 + thread_num = 8 + check_time_out = 3 + + last_check_at = 0 + save_second = 5 + check_keep_second = 60 * 60 * 24 + + def __init__(self): + self.cluster = Cluster() + create_thread_and_run(self, 'watch_cdn', False) + + def init_data(self): + self.items = [] + self.available_items = [] + self.unavailable_items = [] + self.is_finished = False + self.is_ready = False + self.is_recheck = False + + def update_cdn_status(self, auto=False): + if auto: + if Config().is_cdn_enabled(): + self.run() + else: + self.destroy() + + @classmethod + def run(cls): + self = cls() + app_available_check() + self.is_alive = True + self.start() + pass + + def start(self): + if not Config.is_cdn_enabled() or Config().is_slave(): return + self.load_items() + CommonLog.add_quick_log(CommonLog.MESSAGE_CDN_START_TO_CHECK.format(len(self.items))).flush() + self.restore_items() + for i in range(self.thread_num): # 多线程 + create_thread_and_run(jobs=self, callback_name='check_available', wait=Const.IS_TEST) + + def load_items(self): + with open(Config().CDN_ITEM_FILE, encoding='utf-8') as f: + for line, val in enumerate(f): + self.items.append(val.rstrip('\n')) + + def restore_items(self): + """ + 恢复已有数据 + :return: bool + """ + result = False + if path.exists(Config().CDN_ENABLED_AVAILABLE_ITEM_FILE): + with open(Config().CDN_ENABLED_AVAILABLE_ITEM_FILE, encoding='utf-8') as f: + result = f.read() + try: + result = json.loads(result) + except json.JSONDecodeError as e: + result = {} + + # if Config.is_cluster_enabled(): # 集群不用同步 cdn + # result = self.get_data_from_cluster() + + if result: + self.last_check_at = result.get('last_check_at', '') + if self.last_check_at: self.last_check_at = str_to_time(self.last_check_at) + self.available_items = result.get('items', []) + self.unavailable_items = result.get('fail_items', []) + CommonLog.add_quick_log(CommonLog.MESSAGE_CDN_RESTORE_SUCCESS.format(self.last_check_at, + self.last_check_at + timedelta( + seconds=self.check_keep_second))).flush() + return True + return False + + # def get_data_from_cluster(self): + # available_items = self.cluster.session.smembers(Cluster.KEY_CDN_AVAILABLE_ITEMS) + # last_time = self.cluster.session.get(Cluster.KEY_CDN_LAST_CHECK_AT, '') + # if available_items and last_time: + # return {'items': available_items, 'last_check_at': last_time} + # return False + + def is_need_to_recheck(self): + """ + 是否需要重新检查 cdn + :return: + """ + if self.last_check_at and ( + time_now() - self.last_check_at).seconds > self.check_keep_second: + return True + return False + + def get_unchecked_item(self): + if not self.is_recheck: + items = list(set(self.items) - set(self.available_items) - set(self.unavailable_items)) + else: + items = list(set(self.items) - set(self.recheck_available_items) - set(self.recheck_unavailable_items)) + if items: return random.choice(items) + return None + + def check_available(self): + while True and self.is_alive: + item = self.get_unchecked_item() + if not item: return self.check_did_finished() + self.check_item_available(item) + + def watch_cdn(self): + """ + 监控 cdn 状态,自动重新检测 + :return: + """ + while True: + if self.is_alive and not self.is_recheck and self.is_need_to_recheck(): # 重新检测 + self.is_recheck = True + self.is_finished = False + CommonLog.add_quick_log( + CommonLog.MESSAGE_CDN_START_TO_RECHECK.format(len(self.items), time_now())).flush() + for i in range(self.thread_num): # 多线程 + create_thread_and_run(jobs=self, callback_name='check_available', wait=Const.IS_TEST) + stay_second(self.retry_num) + + def destroy(self): + """ + 关闭 CDN + :return: + """ + CommonLog.add_quick_log(CommonLog.MESSAGE_CDN_CLOSED).flush() + self.is_alive = False + self.init_data() + + def check_item_available(self, item, try_num=0): + session = Request() + response = session.get(API_CHECK_CDN_AVAILABLE.format(item), headers={'Host': HOST_URL_OF_12306}, + timeout=self.check_time_out, + verify=False) + + if response.status_code == 200: + if not self.is_recheck: + self.available_items.append(item) + else: + self.recheck_available_items.append(item) + if not self.is_ready: self.check_is_ready() + elif try_num < self.retry_num: # 重试 + stay_second(self.safe_stay_time) + return self.check_item_available(item, try_num + 1) + else: + if not self.is_recheck: + self.unavailable_items.append(item) + else: + self.recheck_unavailable_items.append(item) + if not self.is_recheck and ( + not self.last_check_at or (time_now() - self.last_check_at).seconds > self.save_second): + self.save_available_items() + stay_second(self.safe_stay_time) + + def check_did_finished(self): + self.is_ready = True + if not self.is_finished: + self.is_finished = True + if self.is_recheck: + self.is_recheck = False + self.available_items = self.recheck_available_items + self.unavailable_items = self.recheck_unavailable_items + self.recheck_available_items = [] + self.recheck_unavailable_items = [] + CommonLog.add_quick_log(CommonLog.MESSAGE_CDN_CHECKED_SUCCESS.format(len(self.available_items))).flush() + self.save_available_items() + + def save_available_items(self): + self.last_check_at = time_now() + data = {'items': self.available_items, 'fail_items': self.unavailable_items, + 'last_check_at': str(self.last_check_at)} + with open(Config().CDN_ENABLED_AVAILABLE_ITEM_FILE, 'w') as f: + f.write(json.dumps(data)) + + # if Config.is_master(): + # self.cluster.session.sadd(Cluster.KEY_CDN_AVAILABLE_ITEMS, self.available_items) + # self.cluster.session.set(Cluster.KEY_CDN_LAST_CHECK_AT, time_now()) + + def check_is_ready(self): + if len(self.available_items) > self.is_ready_num: + self.is_ready = True + else: + self.is_ready = False + + @classmethod + def get_cdn(cls): + self = cls() + if self.is_ready: + return random.choice(self.available_items) + return None + + +if __name__ == '__main__': + # Const.IS_TEST = True + Cdn.run() + while not Cdn().is_finished: + stay_second(1) diff --git a/py12306/helpers/request.py b/py12306/helpers/request.py index ca9e61c..01233c3 100644 --- a/py12306/helpers/request.py +++ b/py12306/helpers/request.py @@ -1,8 +1,11 @@ +import requests from requests.exceptions import * from py12306.helpers.func import * from requests_html import HTMLSession, HTMLResponse +requests.packages.urllib3.disable_warnings() + class Request(HTMLSession): """ @@ -57,3 +60,11 @@ class Request(HTMLSession): response.status_code = 500 expand_class(response, 'json', Request.json) return response + + def cdn_request(self, url: str, cdn=None, method='GET', **kwargs): + from py12306.helpers.api import HOST_URL_OF_12306 + from py12306.helpers.cdn import Cdn + if not cdn: cdn = Cdn.get_cdn() + url = url.replace(HOST_URL_OF_12306, cdn) + + return self.request(method,url, headers={'Host': HOST_URL_OF_12306}, verify=False, **kwargs) diff --git a/py12306/log/common_log.py b/py12306/log/common_log.py index 6e65962..c554b47 100644 --- a/py12306/log/common_log.py +++ b/py12306/log/common_log.py @@ -49,6 +49,12 @@ class CommonLog(BaseLog): MESSAGE_RESPONSE_EMPTY_ERROR = '网络错误' + MESSAGE_CDN_START_TO_CHECK = '正在筛选 {} 个 CDN...' + MESSAGE_CDN_START_TO_RECHECK = '正在重新筛选 {} 个 CDN...当前时间 {}\n' + MESSAGE_CDN_RESTORE_SUCCESS = 'CDN 恢复成功,上次检测 {},下次检测 {}\n' + MESSAGE_CDN_CHECKED_SUCCESS = '# CDN 检测完成,可用 CDN {} #\n' + MESSAGE_CDN_CLOSED = '# CDN 已关闭 #' + def __init__(self): super().__init__() self.init_data() @@ -82,13 +88,16 @@ class CommonLog(BaseLog): disable = '未开启' self.add_quick_log('**** 当前配置 ****') self.add_quick_log('多线程查询: {}'.format(get_true_false_text(Config().QUERY_JOB_THREAD_ENABLED, enable, disable))) + self.add_quick_log('CDN 状态: {}'.format(get_true_false_text(Config().CDN_ENABLED, enable, disable))).flush() + self.add_quick_log('通知状态:') self.add_quick_log( '语音验证码: {}'.format(get_true_false_text(Config().NOTIFICATION_BY_VOICE_CODE, enable, disable))) self.add_quick_log('邮件通知: {}'.format(get_true_false_text(Config().EMAIL_ENABLED, enable, disable))) self.add_quick_log('钉钉通知: {}'.format(get_true_false_text(Config().DINGTALK_ENABLED, enable, disable))) self.add_quick_log('Telegram通知: {}'.format(get_true_false_text(Config().TELEGRAM_ENABLED, enable, disable))) self.add_quick_log('ServerChan通知: {}'.format(get_true_false_text(Config().SERVERCHAN_ENABLED, enable, disable))) - self.add_quick_log('PushBear通知: {}'.format(get_true_false_text(Config().PUSHBEAR_ENABLED, enable, disable))) + self.add_quick_log( + 'PushBear通知: {}'.format(get_true_false_text(Config().PUSHBEAR_ENABLED, enable, disable))).flush(sep='\t\t') self.add_quick_log('查询间隔: {} 秒'.format(Config().QUERY_INTERVAL)) self.add_quick_log('用户心跳检测间隔: {} 秒'.format(Config().USER_HEARTBEAT_INTERVAL)) self.add_quick_log('WEB 管理页面: {}'.format(get_true_false_text(Config().WEB_ENABLE, enable, disable))) diff --git a/py12306/log/query_log.py b/py12306/log/query_log.py index cb5efec..b0c0378 100644 --- a/py12306/log/query_log.py +++ b/py12306/log/query_log.py @@ -64,7 +64,6 @@ class QueryLog(BaseLog): # self.add_quick_log('加载status.json失败, 文件内容为: {}.'.format(repr(result))) # self.flush() # 这里可以用不用提示 - if Config.is_cluster_enabled(): result = self.get_data_from_cluster() @@ -157,19 +156,23 @@ class QueryLog(BaseLog): @classmethod def print_job_start(cls, job_name): self = cls() - message = '=== 正在进行第 {query_count} 次查询 {job_name} === {time}'.format( + message = '>> 第 {query_count} 次查询 {job_name} {time}'.format( query_count=int(self.data.get('query_count', 0)) + 1, - job_name=job_name, time=datetime.datetime.now()) + job_name=job_name, time=time_now().strftime("%Y-%m-%d %H:%M:%S")) self.add_log(message) self.refresh_data() if is_main_thread(): self.flush(publish=False) return self + @classmethod + def add_query_time_log(cls, start, end, is_cdn): + return cls().add_log(('*' if is_cdn else '') + '耗时 %.2f' % (end - start)) + @classmethod def add_stay_log(cls, second): self = cls() - self.add_log('安全停留 {}'.format(second)) + self.add_log('停留 {}'.format(second)) return self def print_data_restored(self): diff --git a/py12306/order/order.py b/py12306/order/order.py index 394498a..9318b1c 100644 --- a/py12306/order/order.py +++ b/py12306/order/order.py @@ -23,7 +23,7 @@ class Order: is_need_auth_code = False - max_queue_wait = 120 + max_queue_wait = 60 * 5 # 最大排队时长 current_queue_wait = 0 retry_time = 3 wait_queue_interval = 3 diff --git a/py12306/query/job.py b/py12306/query/job.py index 6e6db97..97d191e 100644 --- a/py12306/query/job.py +++ b/py12306/query/job.py @@ -46,6 +46,8 @@ class Job: query = None cluster = None ticket_info = {} + is_cdn = False + query_time_out = 3 INDEX_TICKET_NUM = 11 INDEX_TRAIN_NUMBER = 3 INDEX_TRAIN_NO = 2 @@ -98,7 +100,10 @@ class Job: self.refresh_station(station) for date in self.left_dates: self.left_date = date + tmp_start_time = time.time() response = self.query_by_date(date) + tmp_end_time = time.time() # 耗时 + QueryLog.add_query_time_log(tmp_start_time, tmp_end_time, is_cdn=self.is_cdn) self.handle_response(response) if not self.is_alive: return self.safe_stay() @@ -116,13 +121,17 @@ class Job: 通过日期进行查询 :return: """ + from py12306.helpers.cdn import Cdn QueryLog.add_log(('\n' if not is_main_thread() else '') + QueryLog.MESSAGE_QUERY_START_BY_DATE.format(date, self.left_station, self.arrive_station)) url = LEFT_TICKETS.get('url').format(left_date=date, left_station=self.left_station_code, arrive_station=self.arrive_station_code, type='leftTicket/queryZ') - - return self.query.session.get(url) + if Config.is_cdn_enabled() and Cdn().is_ready: + self.is_cdn = True + return self.query.session.cdn_request(url, timeout=self.query_time_out) + self.is_cdn = False + return self.query.session.get(url, timeout=self.query_time_out) def handle_response(self, response): """ @@ -141,8 +150,7 @@ class Job: self.ticket_info = ticket_info = result.split('|') if not self.is_trains_number_valid(ticket_info): # 车次是否有效 continue - QueryLog.add_log(QueryLog.MESSAGE_QUERY_LOG_OF_EVERY_TRAIN.format(self.get_info_of_train_number(), - self.get_info_of_ticket_num())) + QueryLog.add_log(QueryLog.MESSAGE_QUERY_LOG_OF_EVERY_TRAIN.format(self.get_info_of_train_number())) if not self.is_has_ticket(ticket_info): continue allow_seats = self.allow_seats if self.allow_seats else list(