From 7519dcedb47fbe4d52b72e8b43b9173b339eb0a9 Mon Sep 17 00:00:00 2001 From: coolsnowwolf Date: Wed, 3 Oct 2018 20:39:56 +0800 Subject: [PATCH] add new ShadowSocksR Plus+ and Turbo ACC acceleration center Luci apps --- include/target.mk | 4 +- package/lean/automount/Makefile | 2 +- package/lean/autosamba/Makefile | 4 +- package/lean/luci-app-flowoffload/Makefile | 4 +- .../luasrc/controller/flowoffload.lua | 2 +- .../luasrc/model/cbi/flowoffload.lua | 6 +- .../po/zh-cn/flowoffload.po | 17 +- package/lean/luci-app-ipsec-vpnd/Makefile | 4 +- .../luasrc/controller/ipsec-server.lua | 11 +- .../model/cbi/ipsec-server/ipsec-server.lua | 136 +- .../luasrc/view/ipsec/ipsec_status.htm | 22 + .../luci-app-ipsec-vpnd/root/etc/init.d/ipsec | 427 +++ .../luci-app-ipsec-vpnd/root/etc/ipsecvpn | 71 - .../root/etc/uci-defaults/ipsec | 41 +- package/lean/luci-app-pptp-server/Makefile | 4 +- .../luasrc/controller/pptp-server.lua | 13 +- .../model/cbi/pptp-server/pptp-server.lua | 108 +- .../luasrc/view/pptp/pptp_status.htm | 22 + .../po/zh-cn/{pptpd.po => pptp.po} | 14 + .../root/etc/pptpd.include | 4 +- .../root/etc/uci-defaults/pptpd | 24 +- package/lean/luci-app-sfe/Makefile | 4 +- .../luci-app-sfe/luasrc/controller/sfe.lua | 25 +- .../luci-app-sfe/luasrc/model/cbi/sfe.lua | 26 +- .../luci-app-sfe/luasrc/view/sfe/status.htm | 21 + package/lean/luci-app-sfe/po/zh-cn/sfe.po | 25 +- package/lean/luci-app-ssr-plus/Makefile | 18 + .../luasrc}/controller/shadowsocksr.lua | 44 +- .../model/cbi/shadowsocksr/client-config.lua | 2 +- .../luasrc/model/cbi/shadowsocksr/client.lua | 73 + .../luasrc/model/cbi/shadowsocksr/control.lua | 44 + .../luasrc/model/cbi/shadowsocksr/list.lua | 23 + .../luasrc/model/cbi/shadowsocksr/log.lua | 14 + .../luasrc/model/cbi/shadowsocksr/servers.lua | 81 + .../luasrc/model/cbi/shadowsocksr/status.lua | 150 + .../luasrc}/view/shadowsocksr/check.htm | 0 .../luasrc}/view/shadowsocksr/checkport.htm | 0 .../luasrc}/view/shadowsocksr/refresh.htm | 0 .../luasrc}/view/shadowsocksr/ssrurl.htm | 0 .../luasrc/view/shadowsocksr/status.htm | 22 + .../po/zh-cn/ssr-plus.po} | 77 +- .../root/etc}/china_ssr.txt | 770 +++- .../root/etc/config/gfw.list | 36 + .../root/etc/config/shadowsocksr | 30 + .../root/etc/dnsmasq.ssr/ad.conf | 0 .../root/etc/dnsmasq.ssr}/gfw_list.conf | 0 .../root/etc/init.d/shadowsocksr} | 99 +- .../root/etc/uci-defaults/luci-ssr-plus} | 1 + .../root/usr/bin/ssr-ad} | 0 .../root/usr/bin/ssr-gfw} | 4 +- .../root/usr/bin/ssr-monitor} | 0 .../root/usr/bin/ssr-rules} | 19 +- .../root/usr/bin/ssr-switch} | 0 .../root/usr/share/shadowsocksr/gfw2ipset.sh | 5 + .../root/usr/share/shadowsocksr/ssr-watchdog | 17 + .../root/usr/share/shadowsocksr/subscribe.sh | 18 +- .../root/usr/share/shadowsocksr/update.sh | 24 + package/lean/luci-app-zerotier/Makefile | 2 +- .../luasrc/controller/zerotier.lua | 2 +- package/lean/openwrt-ssr/Makefile | 238 -- package/lean/openwrt-ssr/files/ad.conf | 3365 ----------------- .../openwrt-ssr/files/custom_forward.conf | 68 - package/lean/openwrt-ssr/files/dnsmasq.conf | 38 - .../files/luci/i18n/shadowsocksr.zh-cn.lmo | Bin 4484 -> 0 bytes .../luci/model/cbi/shadowsocksr/client.lua | 376 -- .../model/cbi/shadowsocksr/server-config.lua | 108 - .../luci/model/cbi/shadowsocksr/server.lua | 122 - .../luci/model/cbi/shadowsocksr/servers.lua | 40 - .../luci/model/cbi/shadowsocksr/status.lua | 258 -- .../openwrt-ssr/files/root/usr/bin/ssr-server | Bin 279319 -> 0 bytes .../openwrt-ssr/files/shadowsocksr.config | 76 - .../lean/openwrt-ssr/tools/po2lmo/Makefile | 12 - .../lean/openwrt-ssr/tools/po2lmo/src/po2lmo | Bin 19277 -> 0 bytes .../openwrt-ssr/tools/po2lmo/src/po2lmo.c | 247 -- .../tools/po2lmo/src/template_lmo.c | 328 -- .../tools/po2lmo/src/template_lmo.h | 92 - package/lean/shadowsocksR-libev-full/Makefile | 15 +- .../patches/0001-ss-check-Backport.patch | 0 target/linux/x86/Makefile | 2 +- 79 files changed, 2037 insertions(+), 5964 deletions(-) create mode 100644 package/lean/luci-app-ipsec-vpnd/luasrc/view/ipsec/ipsec_status.htm create mode 100755 package/lean/luci-app-ipsec-vpnd/root/etc/init.d/ipsec delete mode 100755 package/lean/luci-app-ipsec-vpnd/root/etc/ipsecvpn create mode 100644 package/lean/luci-app-pptp-server/luasrc/view/pptp/pptp_status.htm rename package/lean/luci-app-pptp-server/po/zh-cn/{pptpd.po => pptp.po} (68%) create mode 100644 package/lean/luci-app-sfe/luasrc/view/sfe/status.htm create mode 100644 package/lean/luci-app-ssr-plus/Makefile rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/controller/shadowsocksr.lua (76%) rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/model/cbi/shadowsocksr/client-config.lua (99%) create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/list.lua create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua create mode 100644 package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/view/shadowsocksr/check.htm (100%) rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/view/shadowsocksr/checkport.htm (100%) rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/view/shadowsocksr/refresh.htm (100%) rename package/lean/{openwrt-ssr/files/luci => luci-app-ssr-plus/luasrc}/view/shadowsocksr/ssrurl.htm (100%) create mode 100644 package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm rename package/lean/{openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.po => luci-app-ssr-plus/po/zh-cn/ssr-plus.po} (79%) rename package/lean/{openwrt-ssr/files => luci-app-ssr-plus/root/etc}/china_ssr.txt (91%) create mode 100644 package/lean/luci-app-ssr-plus/root/etc/config/gfw.list create mode 100644 package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr create mode 100644 package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/ad.conf rename package/lean/{openwrt-ssr/files => luci-app-ssr-plus/root/etc/dnsmasq.ssr}/gfw_list.conf (100%) mode change 100755 => 100644 rename package/lean/{openwrt-ssr/files/shadowsocksr.init => luci-app-ssr-plus/root/etc/init.d/shadowsocksr} (85%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/root/etc/uci-defaults/luci-shadowsocksr => luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus} (92%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/shadowsocksr.ad => luci-app-ssr-plus/root/usr/bin/ssr-ad} (100%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/shadowsocksr.gfw => luci-app-ssr-plus/root/usr/bin/ssr-gfw} (86%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/shadowsocksr.monitor => luci-app-ssr-plus/root/usr/bin/ssr-monitor} (100%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/shadowsocksr.rule => luci-app-ssr-plus/root/usr/bin/ssr-rules} (91%) mode change 100644 => 100755 rename package/lean/{openwrt-ssr/files/shadowsocksr.switch => luci-app-ssr-plus/root/usr/bin/ssr-switch} (100%) mode change 100644 => 100755 create mode 100755 package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh create mode 100755 package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssr-watchdog rename package/lean/{openwrt-ssr/files => luci-app-ssr-plus}/root/usr/share/shadowsocksr/subscribe.sh (91%) create mode 100755 package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.sh delete mode 100644 package/lean/openwrt-ssr/Makefile delete mode 100755 package/lean/openwrt-ssr/files/ad.conf delete mode 100755 package/lean/openwrt-ssr/files/custom_forward.conf delete mode 100644 package/lean/openwrt-ssr/files/dnsmasq.conf delete mode 100644 package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.lmo delete mode 100644 package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/client.lua delete mode 100644 package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server-config.lua delete mode 100644 package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server.lua delete mode 100644 package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/servers.lua delete mode 100644 package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/status.lua delete mode 100644 package/lean/openwrt-ssr/files/root/usr/bin/ssr-server delete mode 100644 package/lean/openwrt-ssr/files/shadowsocksr.config delete mode 100644 package/lean/openwrt-ssr/tools/po2lmo/Makefile delete mode 100755 package/lean/openwrt-ssr/tools/po2lmo/src/po2lmo delete mode 100644 package/lean/openwrt-ssr/tools/po2lmo/src/po2lmo.c delete mode 100644 package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.c delete mode 100644 package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.h rename package/lean/{openwrt-ssr => shadowsocksR-libev-full}/patches/0001-ss-check-Backport.patch (100%) diff --git a/include/target.mk b/include/target.mk index ad8de7291..4950c9ebd 100644 --- a/include/target.mk +++ b/include/target.mk @@ -15,8 +15,8 @@ DEVICE_TYPE?=router # Default packages - the really basic set DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd \ iptables-mod-nat-extra kmod-nf-nathelper kmod-nf-nathelper-extra kmod-ipt-raw kmod-macvlan kmod-nft-offload block-mount automount \ -default-settings ipset-lists luci luci-app-ddns luci-app-sqm luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot \ -luci-app-filetransfer luci-app-ssr-pro luci-app-usb-printer luci-app-vsftpd ddns-scripts_aliyun luci-app-xlnetacc \ +default-settings luci luci-app-ddns luci-app-sqm luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot \ +luci-app-filetransfer luci-app-ssr-plus luci-app-usb-printer luci-app-vsftpd ddns-scripts_aliyun luci-app-xlnetacc \ luci-app-pptp-server luci-app-ipsec-vpnd luci-app-vlmcsd luci-app-wifischedule luci-app-wol \ luci-app-sfe luci-app-flowoffload luci-app-nlbwmon luci-app-wrtbwmon # For nas targets diff --git a/package/lean/automount/Makefile b/package/lean/automount/Makefile index 3d8589c90..26909970c 100644 --- a/package/lean/automount/Makefile +++ b/package/lean/automount/Makefile @@ -17,7 +17,7 @@ include $(INCLUDE_DIR)/package.mk define Package/automount TITLE:=Mount autoconfig hotplug script. MAINTAINER:=Lean - DEPENDS:=block-mount +kmod-usb-storage +kmod-usb-storage-extras +kmod-fs-ext4 +kmod-fs-vfat +ntfs-3g + DEPENDS:=block-mount +kmod-usb-storage +kmod-usb-storage-extras endef define Package/automount/description diff --git a/package/lean/autosamba/Makefile b/package/lean/autosamba/Makefile index 908d459d8..142d06c19 100644 --- a/package/lean/autosamba/Makefile +++ b/package/lean/autosamba/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=autosamba PKG_VERSION:=1 -PKG_RELEASE:=8 +PKG_RELEASE:=9 PKG_ARCH:=all include $(INCLUDE_DIR)/package.mk @@ -17,7 +17,7 @@ include $(INCLUDE_DIR)/package.mk define Package/autosamba TITLE:=Samba autoconfig hotplug script. MAINTAINER:=Lean - DEPENDS:=+luci-app-samba + DEPENDS:=+luci-app-samba +kmod-fs-vfat +ntfs-3g +kmod-fs-ext4 endef define Package/autosamba/description diff --git a/package/lean/luci-app-flowoffload/Makefile b/package/lean/luci-app-flowoffload/Makefile index 8b9a3ac63..7d612d287 100644 --- a/package/lean/luci-app-flowoffload/Makefile +++ b/package/lean/luci-app-flowoffload/Makefile @@ -6,10 +6,10 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for Flow Offload -LUCI_DEPENDS:=@LINUX_4_14 +LUCI_DEPENDS:=+kmod-ipt-offload @LINUX_4_14 LUCI_PKGARCH:=all PKG_VERSION:=1.0 -PKG_RELEASE:=7 +PKG_RELEASE:=6 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua b/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua index 5a20c2a10..fedb09e36 100644 --- a/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua +++ b/package/lean/luci-app-flowoffload/luasrc/controller/flowoffload.lua @@ -5,7 +5,7 @@ function index() return end local page - page = entry({"admin", "network", "flowoffload"}, cbi("flowoffload"), _(" Flow Offload ACC"), 101) + page = entry({"admin", "network", "flowoffload"}, cbi("flowoffload"), _("Turbo ACC Center"), 101) page.i18n = "flowoffload" page.dependent = true diff --git a/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua b/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua index 8a9dea47a..fb17bc91e 100644 --- a/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua +++ b/package/lean/luci-app-flowoffload/luasrc/model/cbi/flowoffload.lua @@ -2,7 +2,7 @@ local m,s,o local SYS = require "luci.sys" m = Map("firewall") -m.title = translate("Linux Flow Offload Forwarding Engine Settings") +m.title = translate("Turbo ACC Acceleration Settings") m.description = translate("Opensource Linux Flow Offload driver (Fast Path or HWNAT)") m:append(Template("flow/status")) @@ -19,8 +19,6 @@ hw = s:option(Flag, "flow_offloading_hw", translate("HWNAT")) hw.default = 0 hw.rmempty = false hw.description = translate("Enable Hardware NAT (depends on hw capability like MTK 762x)") -hw:depends( "flow_offloading", 1) - - +hw:depends("flow_offloading", 1) return m diff --git a/package/lean/luci-app-flowoffload/po/zh-cn/flowoffload.po b/package/lean/luci-app-flowoffload/po/zh-cn/flowoffload.po index eccef341d..66fcf762d 100644 --- a/package/lean/luci-app-flowoffload/po/zh-cn/flowoffload.po +++ b/package/lean/luci-app-flowoffload/po/zh-cn/flowoffload.po @@ -1,11 +1,11 @@ msgid "Flow Offload ACC" msgstr "Flow Offload 转发加速" -msgid "Linux Flow offload Forwarding Engine is Running" -msgstr "Linux Flow offload 转发引擎正在运行" +msgid "Turbo ACC Center" +msgstr "Turbo ACC 网络加速" -msgid "Linux Flow offload Forwarding Engine is Not Running" -msgstr "Linux Flow offload Forwarding 转发引擎未运行" +msgid "Turbo ACC Acceleration Settings" +msgstr "Turbo ACC 网络加速设置" msgid "Linux Flow Offload Forwarding Engine Settings" msgstr "Linux Flow Offload Forwarding 转发加速引擎设置" @@ -16,9 +16,8 @@ msgstr "开源 Linux Flow Offload 驱动 (支持 Fast Path 或者 HWNAT)" msgid "Enable" msgstr "启用" +msgid "Enable software flow offloading for connections. (decrease cpu load / increase routing throughput)" +msgstr "开启 Flow Offloading 转发加速. (降低CPU占用 / 增强路由转发性能,和多WAN或者QOS功能可能会冲突)" - - - - - +msgid "Enable Hardware NAT (depends on hw capability like MTK 762x)" +msgstr "启用硬件HWNAT加速(依赖特定的硬件,例如 MTK 762x 系列)" diff --git a/package/lean/luci-app-ipsec-vpnd/Makefile b/package/lean/luci-app-ipsec-vpnd/Makefile index 2779ce756..5446a3d74 100644 --- a/package/lean/luci-app-ipsec-vpnd/Makefile +++ b/package/lean/luci-app-ipsec-vpnd/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for IPSec VPN Server (IKEv1 with PSK and Xauth) LUCI_DEPENDS:=+strongswan-minimal +strongswan-mod-xauth-generic LUCI_PKGARCH:=all -PKG_VERSION:=2.0 -PKG_RELEASE:=10 +PKG_VERSION:=1.0 +PKG_RELEASE:=5 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-ipsec-vpnd/luasrc/controller/ipsec-server.lua b/package/lean/luci-app-ipsec-vpnd/luasrc/controller/ipsec-server.lua index 5e944da0f..2925194c6 100644 --- a/package/lean/luci-app-ipsec-vpnd/luasrc/controller/ipsec-server.lua +++ b/package/lean/luci-app-ipsec-vpnd/luasrc/controller/ipsec-server.lua @@ -7,8 +7,13 @@ function index() end entry({"admin", "vpn"}, firstchild(), "VPN", 45).dependent = false - - local page - entry({"admin", "vpn", "ipsec-server"}, cbi("ipsec-server/ipsec-server"), _("IPSec VPN Server"), 80).dependent=false + entry({"admin", "vpn", "ipsec-server","status"},call("act_status")).leaf=true +end + +function act_status() + local e={} + e.running=luci.sys.call("pgrep ipsec >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) end diff --git a/package/lean/luci-app-ipsec-vpnd/luasrc/model/cbi/ipsec-server/ipsec-server.lua b/package/lean/luci-app-ipsec-vpnd/luasrc/model/cbi/ipsec-server/ipsec-server.lua index dfeb6bc56..79a47b8bf 100644 --- a/package/lean/luci-app-ipsec-vpnd/luasrc/model/cbi/ipsec-server/ipsec-server.lua +++ b/package/lean/luci-app-ipsec-vpnd/luasrc/model/cbi/ipsec-server/ipsec-server.lua @@ -1,12 +1,11 @@ ---require("luci.tools.webadmin") - mp = Map("ipsec", translate("IPSec VPN Server")) mp.description = translate("IPSec VPN connectivity using the native built-in VPN Client on iOS or Andriod (IKEv1 with PSK and Xauth)") +mp:section(SimpleSection).template = "ipsec/ipsec_status" + s = mp:section(NamedSection, "ipsec", "service") s.anonymouse = true ---s.addremove = true enabled = s:option(Flag, "enabled", translate("Enable")) enabled.default = 0 @@ -33,135 +32,4 @@ password.password = true secret = s:option(Value, "secret", translate("Secret Pre-Shared Key")) secret.password = true - -function mp.on_save(self) - require "luci.model.uci" - require "luci.sys" - - local have_ike_rule = false - local have_ipsec_rule = false - local have_ah_rule = false - local have_esp_rule = false - - luci.model.uci.cursor():foreach('firewall', 'rule', - function (section) - if section.name == 'ike' then - have_ike_rule = true - end - if section.name == 'ipsec' then - have_ipsec_rule = true - end - if section.name == 'ah' then - have_ah_rule = true - end - if section.name == 'esp' then - have_esp_rule = true - end - end - ) - - if not have_ike_rule then - local cursor = luci.model.uci.cursor() - local ike_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', ike_rulename, { - ['name'] = 'ike', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 'udp', - ['dest_port'] = 500 - }) - cursor:save('firewall') - cursor:commit('firewall') - end - if not have_ipsec_rule then - local cursor = luci.model.uci.cursor() - local ipsec_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', ipsec_rulename, { - ['name'] = 'ipsec', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 'udp', - ['dest_port'] = 4500 - }) - cursor:save('firewall') - cursor:commit('firewall') - end - if not have_ah_rule then - local cursor = luci.model.uci.cursor() - local ah_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', ah_rulename, { - ['name'] = 'ah', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 'ah' - }) - cursor:save('firewall') - cursor:commit('firewall') - end - if not have_esp_rule then - local cursor = luci.model.uci.cursor() - local esp_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', esp_rulename, { - ['name'] = 'esp', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 'esp' - }) - cursor:save('firewall') - cursor:commit('firewall') - end - - -end - - -local pid = luci.util.exec("/usr/bin/pgrep ipsec") - -function ipsec_process_status() - local status = "IPSec VPN Server is not running now " - - if pid ~= "" then - status = "IPSec VPN Server is running with the PID " .. pid .. "" - end - - local status = { status=status } - local table = { pid=status } - return table -end - -t = mp:section(Table, ipsec_process_status()) -t.anonymous = true - -t:option(DummyValue, "status", translate("IPSec VPN Server status")) - -if pid == "" then - start = t:option(Button, "_start", translate("Start")) - start.inputstyle = "apply" - function start.write(self, section) - luci.util.exec("uci set ipsec.ipsec.enabled='1' && uci commit ipsec") - message = luci.util.exec("/etc/init.d/ipsec start 2>&1") - luci.util.exec("sleep 2") - luci.http.redirect( - luci.dispatcher.build_url("admin", "vpn", "ipsec-server") - ) - end -else - stop = t:option(Button, "_stop", translate("Stop")) - stop.inputstyle = "reset" - function stop.write(self, section) - luci.util.exec("uci set ipsec.ipsec.enabled='0' && uci commit ipsec") - luci.util.exec("/etc/init.d/ipsec stop") - luci.util.exec("sleep 2") - luci.http.redirect( - luci.dispatcher.build_url("admin", "vpn", "ipsec-server") - ) - end -end - -function mp.on_after_commit(self) - os.execute("/etc/ipsecvpn restart >/dev/null 2>&1 &") - os.execute("/etc/init.d/firewall restart >/dev/null 2>&1 &") -end - - return mp diff --git a/package/lean/luci-app-ipsec-vpnd/luasrc/view/ipsec/ipsec_status.htm b/package/lean/luci-app-ipsec-vpnd/luasrc/view/ipsec/ipsec_status.htm new file mode 100644 index 000000000..60225b490 --- /dev/null +++ b/package/lean/luci-app-ipsec-vpnd/luasrc/view/ipsec/ipsec_status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/package/lean/luci-app-ipsec-vpnd/root/etc/init.d/ipsec b/package/lean/luci-app-ipsec-vpnd/root/etc/init.d/ipsec new file mode 100755 index 000000000..5a4c6a217 --- /dev/null +++ b/package/lean/luci-app-ipsec-vpnd/root/etc/init.d/ipsec @@ -0,0 +1,427 @@ +#!/bin/sh /etc/rc.common + +START=90 +STOP=10 + +USE_PROCD=1 +PROG=/usr/lib/ipsec/starter + +. $IPKG_INSTROOT/lib/functions.sh +. $IPKG_INSTROOT/lib/functions/network.sh + +IPSEC_SECRETS_FILE=/etc/ipsec.secrets +IPSEC_CONN_FILE=/etc/ipsec.conf +STRONGSWAN_CONF_FILE=/etc/strongswan.conf + +IPSEC_VAR_SECRETS_FILE=/var/ipsec/ipsec.secrets +IPSEC_VAR_CONN_FILE=/var/ipsec/ipsec.conf +STRONGSWAN_VAR_CONF_FILE=/var/ipsec/strongswan.conf + +WAIT_FOR_INTF=0 + +file_reset() { + : > "$1" +} + +xappend() { + local file="$1" + shift + + echo "${@}" >> "${file}" +} + +remove_include() { + local file="$1" + local include="$2" + + sed -i "\_${include}_d" "${file}" +} + +remove_includes() { + remove_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}" + remove_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}" + remove_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}" +} + +do_include() { + local conf="$1" + local uciconf="$2" + local backup=`mktemp -t -p /tmp/ ipsec-init-XXXXXX` + + [ ! -f "${conf}" ] && rm -rf "${conf}" + touch "${conf}" + + cat "${conf}" | grep -v "${uciconf}" > "${backup}" + mv "${backup}" "${conf}" + xappend "${conf}" "include ${uciconf}" + file_reset "${uciconf}" +} + +ipsec_reset() { + do_include "${IPSEC_CONN_FILE}" "${IPSEC_VAR_CONN_FILE}" +} + +ipsec_xappend() { + xappend "${IPSEC_VAR_CONN_FILE}" "$@" +} + +swan_reset() { + do_include "${STRONGSWAN_CONF_FILE}" "${STRONGSWAN_VAR_CONF_FILE}" +} + +swan_xappend() { + xappend "${STRONGSWAN_VAR_CONF_FILE}" "$@" +} + +secret_reset() { + do_include "${IPSEC_SECRETS_FILE}" "${IPSEC_VAR_SECRETS_FILE}" +} + +secret_xappend() { + xappend "${IPSEC_VAR_SECRETS_FILE}" "$@" +} + +warning() { + echo "WARNING: $@" >&2 +} + +add_crypto_proposal() { + local encryption_algorithm + local hash_algorithm + local dh_group + + config_get encryption_algorithm "$1" encryption_algorithm + config_get hash_algorithm "$1" hash_algorithm + config_get dh_group "$1" dh_group + + [ -n "${encryption_algorithm}" ] && \ + crypto="${crypto:+${crypto},}${encryption_algorithm}${hash_algorithm:+-${hash_algorithm}}${dh_group:+-${dh_group}}" +} + +set_crypto_proposal() { + local conf="$1" + local proposal + + crypto="" + + config_get crypto_proposal "$conf" crypto_proposal "" + for proposal in $crypto_proposal; do + add_crypto_proposal "$proposal" + done + + [ -n "${crypto}" ] && { + local force_crypto_proposal + + config_get_bool force_crypto_proposal "$conf" force_crypto_proposal + + [ "${force_crypto_proposal}" = "1" ] && crypto="${crypto}!" + } + + crypto_proposal="${crypto}" +} + +config_conn() { + # Generic ipsec conn section shared by tunnel and transport + local mode + local local_subnet + local local_nat + local local_sourceip + local local_updown + local local_firewall + local remote_subnet + local remote_sourceip + local remote_updown + local remote_firewall + local ikelifetime + local lifetime + local margintime + local keyingtries + local dpdaction + local dpddelay + local inactivity + local keyexchange + + config_get mode "$1" mode "route" + config_get local_subnet "$1" local_subnet "" + config_get local_nat "$1" local_nat "" + config_get local_sourceip "$1" local_sourceip "" + config_get local_updown "$1" local_updown "" + config_get local_firewall "$1" local_firewall "" + config_get remote_subnet "$1" remote_subnet "" + config_get remote_sourceip "$1" remote_sourceip "" + config_get remote_updown "$1" remote_updown "" + config_get remote_firewall "$1" remote_firewall "" + config_get ikelifetime "$1" ikelifetime "3h" + config_get lifetime "$1" lifetime "1h" + config_get margintime "$1" margintime "9m" + config_get keyingtries "$1" keyingtries "3" + config_get dpdaction "$1" dpdaction "none" + config_get dpddelay "$1" dpddelay "30s" + config_get inactivity "$1" inactivity + config_get keyexchange "$1" keyexchange "ikev2" + + [ -n "$local_nat" ] && local_subnet=$local_nat + + ipsec_xappend "conn $config_name-$1" + ipsec_xappend " left=%any" + ipsec_xappend " right=$remote_gateway" + + [ -n "$local_sourceip" ] && ipsec_xappend " leftsourceip=$local_sourceip" + [ -n "$local_subnet" ] && ipsec_xappend " leftsubnet=$local_subnet" + + [ -n "$local_firewall" ] && ipsec_xappend " leftfirewall=$local_firewall" + [ -n "$remote_firewall" ] && ipsec_xappend " rightfirewall=$remote_firewall" + + ipsec_xappend " ikelifetime=$ikelifetime" + ipsec_xappend " lifetime=$lifetime" + ipsec_xappend " margintime=$margintime" + ipsec_xappend " keyingtries=$keyingtries" + ipsec_xappend " dpdaction=$dpdaction" + ipsec_xappend " dpddelay=$dpddelay" + + [ -n "$inactivity" ] && ipsec_xappend " inactivity=$inactivity" + + if [ "$auth_method" = "psk" ]; then + ipsec_xappend " leftauth=psk" + ipsec_xappend " rightauth=psk" + + [ "$remote_sourceip" != "" ] && ipsec_xappend " rightsourceip=$remote_sourceip" + [ "$remote_subnet" != "" ] && ipsec_xappend " rightsubnet=$remote_subnet" + + ipsec_xappend " auto=$mode" + else + warning "AuthenticationMethod $auth_method not supported" + fi + + [ -n "$local_identifier" ] && ipsec_xappend " leftid=$local_identifier" + [ -n "$remote_identifier" ] && ipsec_xappend " rightid=$remote_identifier" + [ -n "$local_updown" ] && ipsec_xappend " leftupdown=$local_updown" + [ -n "$remote_updown" ] && ipsec_xappend " rightupdown=$remote_updown" + ipsec_xappend " keyexchange=$keyexchange" + + set_crypto_proposal "$1" + [ -n "${crypto_proposal}" ] && ipsec_xappend " esp=$crypto_proposal" + [ -n "${ike_proposal}" ] && ipsec_xappend " ike=$ike_proposal" +} + +config_tunnel() { + config_conn "$1" + + # Specific for the tunnel part + ipsec_xappend " type=tunnel" +} + +config_transport() { + config_conn "$1" + + # Specific for the transport part + ipsec_xappend " type=transport" +} + +config_remote() { + local enabled + local gateway + local pre_shared_key + local auth_method + + config_name=$1 + + config_get_bool enabled "$1" enabled 0 + [ $enabled -eq 0 ] && return + + config_get gateway "$1" gateway + config_get pre_shared_key "$1" pre_shared_key + config_get auth_method "$1" authentication_method + config_get local_identifier "$1" local_identifier "" + config_get remote_identifier "$1" remote_identifier "" + + [ "$gateway" = "any" ] && remote_gateway="%any" || remote_gateway="$gateway" + + [ -z "$local_identifier" ] && { + local ipdest + + [ "$remote_gateway" = "%any" ] && ipdest="1.1.1.1" || ipdest="$remote_gateway" + local_gateway=`ip route get $ipdest | awk -F"src" '/src/{gsub(/ /,"");print $2}'` + } + + [ -n "$local_identifier" ] && secret_xappend -n "$local_identifier " || secret_xappend -n "$local_gateway " + [ -n "$remote_identifier" ] && secret_xappend -n "$remote_identifier " || secret_xappend -n "$remote_gateway " + + secret_xappend ": PSK \"$pre_shared_key\"" + + set_crypto_proposal "$1" + ike_proposal="$crypto_proposal" + + config_list_foreach "$1" tunnel config_tunnel + + config_list_foreach "$1" transport config_transport + + ipsec_xappend "" +} + +config_ipsec() { + local debug + local rtinstall_enabled + local routing_tables_ignored + local routing_table + local routing_table_id + local interface + local device_list + + ipsec_reset + secret_reset + swan_reset + + ipsec_xappend "# generated by /etc/init.d/ipsec" + ipsec_xappend "version 2" + ipsec_xappend "" + + secret_xappend "# generated by /etc/init.d/ipsec" + + config_get debug "$1" debug 0 + config_get_bool rtinstall_enabled "$1" rtinstall_enabled 1 + [ $rtinstall_enabled -eq 1 ] && install_routes=yes || install_routes=no + + # prepare extra charon config option ignore_routing_tables + for routing_table in $(config_get "$1" "ignore_routing_tables"); do + if [ "$routing_table" -ge 0 ] 2>/dev/null; then + routing_table_id=$routing_table + else + routing_table_id=$(sed -n '/[ \t]*[0-9]\+[ \t]\+'$routing_table'[ \t]*$/s/[ \t]*\([0-9]\+\).*/\1/p' /etc/iproute2/rt_tables) + fi + + [ -n "$routing_table_id" ] && append routing_tables_ignored "$routing_table_id" + done + + local interface_list=$(config_get "$1" "interface") + if [ -z "$interface_list" ]; then + WAIT_FOR_INTF=0 + else + for interface in $interface_list; do + network_get_device device $interface + [ -n "$device" ] && append device_list "$device" "," + done + [ -n "$device_list" ] && WAIT_FOR_INTF=0 || WAIT_FOR_INTF=1 + fi + + swan_xappend "# generated by /etc/init.d/ipsec" + swan_xappend "charon {" + swan_xappend " load_modular = yes" + swan_xappend " install_routes = $install_routes" + [ -n "$routing_tables_ignored" ] && swan_xappend " ignore_routing_tables = $routing_tables_ignored" + [ -n "$device_list" ] && swan_xappend " interfaces_use = $device_list" + swan_xappend " plugins {" + swan_xappend " include /etc/strongswan.d/charon/*.conf" + swan_xappend " }" + swan_xappend " syslog {" + swan_xappend " identifier = ipsec" + swan_xappend " daemon {" + swan_xappend " default = $debug" + swan_xappend " }" + swan_xappend " auth {" + swan_xappend " default = $debug" + swan_xappend " }" + swan_xappend " }" + swan_xappend "}" +} + +prepare_env() { + mkdir -p /var/ipsec + remove_includes + config_load ipsec + config_foreach config_ipsec ipsec + config_foreach config_remote remote +} + +service_running() { + ipsec status > /dev/null 2>&1 +} + +reload_service() { + local bool vt_enabled=`uci get ipsec.@service[0].enabled 2>/dev/null` + [ "$vt_enabled" = 0 ] && /etc/init.d/ipsec stop && return + running && { + prepare_env + [ $WAIT_FOR_INTF -eq 0 ] && { + ipsec rereadall + ipsec reload + return + } + } + [ "$vt_enabled" = 1 ] && start +} + +check_ipsec_interface() { + local intf + + for intf in $(config_get "$1" interface); do + procd_add_interface_trigger "interface.*" "$intf" /etc/init.d/ipsec reload + done +} + +service_triggers() { + procd_add_reload_trigger "ipsec" + config load "ipsec" + config_foreach check_ipsec_interface ipsec +} + +start_service() { + local vt_enabled=`uci get ipsec.@service[0].enabled 2>/dev/null` + local vt_clientip=`uci get ipsec.@service[0].clientip` + local vt_clientdns=`uci get ipsec.@service[0].clientdns` + local vt_account=`uci get ipsec.@service[0].account` + local vt_password=`uci get ipsec.@service[0].password 2>/dev/null` + local vt_secret=`uci get ipsec.@service[0].secret 2>/dev/null` + + [ "$vt_enabled" = 0 ] && /etc/init.d/ipsec stop && return + + cat > /etc/ipsec.conf < /etc/ipsec.secrets < -# - -START=99 - -start() -{ - local vt_enabled=`uci get ipsec.@service[0].enabled 2>/dev/null` - local vt_clientip=`uci get ipsec.@service[0].clientip` - local vt_clientdns=`uci get ipsec.@service[0].clientdns` - local vt_account=`uci get ipsec.@service[0].account` - local vt_password=`uci get ipsec.@service[0].password 2>/dev/null` - local vt_secret=`uci get ipsec.@service[0].secret 2>/dev/null` - - # ----------------------------------------------------------------- - if [ "$vt_enabled" = 0 ]; then - /etc/init.d/ipsec disable && /etc/init.d/ipsec stop - echo "WARNING: IPSec VPN is disabled." - return 1 - fi - - cat > /etc/ipsec.conf < /etc/ipsec.secrets </dev/null commit firewall EOF -/etc/init.d/ipsec disable && /etc/init.d/ipsec stop +uci -q batch <<-EOF >/dev/null + delete firewall.ike + add firewall rule + rename firewall.@rule[-1]="ike" + set firewall.@rule[-1].name="ike" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="udp" + set firewall.@rule[-1].dest_port="500" + delete firewall.ipsec + add firewall rule + rename firewall.@rule[-1]="ipsec" + set firewall.@rule[-1].name="ipsec" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="udp" + set firewall.@rule[-1].dest_port="4500" + delete firewall.ah + add firewall rule + rename firewall.@rule[-1]="ah" + set firewall.@rule[-1].name="ah" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="ah" + delete firewall.esp + add firewall rule + rename firewall.@rule[-1]="esp" + set firewall.@rule[-1].name="esp" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="esp" + commit firewall +EOF + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@ipsec[-1] + add ucitrack ipsec + set ucitrack.@ipsec[-1].init=ipsec + commit ucitrack +EOF rm -f /tmp/luci-indexcache exit 0 diff --git a/package/lean/luci-app-pptp-server/Makefile b/package/lean/luci-app-pptp-server/Makefile index 1947b2a2d..2e13beb86 100644 --- a/package/lean/luci-app-pptp-server/Makefile +++ b/package/lean/luci-app-pptp-server/Makefile @@ -9,8 +9,8 @@ LUCI_TITLE:=LuCI support for PPTP VPN Server LUCI_DEPENDS:=+pptpd +kmod-mppe +ppp LUCI_PKGARCH:=all PKG_NAME:=luci-app-pptp-server -PKG_VERSION:=2.0 -PKG_RELEASE:=7 +PKG_VERSION:=1.0 +PKG_RELEASE:=13 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-pptp-server/luasrc/controller/pptp-server.lua b/package/lean/luci-app-pptp-server/luasrc/controller/pptp-server.lua index 4274acd4f..5bda83098 100644 --- a/package/lean/luci-app-pptp-server/luasrc/controller/pptp-server.lua +++ b/package/lean/luci-app-pptp-server/luasrc/controller/pptp-server.lua @@ -6,9 +6,14 @@ function index() return end - entry({"admin", "vpn"}, firstchild(), "VPN", 45).dependent = false - - local page - + entry({"admin", "vpn"}, firstchild(), "VPN", 45).dependent = false entry({"admin", "vpn", "pptp-server"}, cbi("pptp-server/pptp-server"), _("PPTP VPN Server"), 80).dependent=false + entry({"admin", "vpn", "pptp-server","status"},call("act_status")).leaf=true +end + +function act_status() + local e={} + e.running=luci.sys.call("pgrep pptpd >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) end diff --git a/package/lean/luci-app-pptp-server/luasrc/model/cbi/pptp-server/pptp-server.lua b/package/lean/luci-app-pptp-server/luasrc/model/cbi/pptp-server/pptp-server.lua index 1bc851a18..8ad784574 100644 --- a/package/lean/luci-app-pptp-server/luasrc/model/cbi/pptp-server/pptp-server.lua +++ b/package/lean/luci-app-pptp-server/luasrc/model/cbi/pptp-server/pptp-server.lua @@ -1,11 +1,11 @@ ---require("luci.tools.webadmin") +mp = Map("pptpd", "PPTP VPN Server","") +mp.description = translate("PPTP VPN Server connectivity using the native built-in VPN Client on Windows/Linux or Andriod") -mp = Map("pptpd", "PPTP Server","") +mp:section(SimpleSection).template = "pptp/pptp_status" -s = mp:section(NamedSection, "pptpd", "service", translate("PPTP Service")) +s = mp:section(NamedSection, "pptpd", "service") s.anonymouse = true ---s.addremove = true enabled = s:option(Flag, "enabled", translate("Enable")) enabled.default = 0 @@ -34,104 +34,4 @@ username.datatype = "string" password = logins:option(Value, "password", translate("Password")) password.password = true -function mp.on_save(self) - require "luci.model.uci" - require "luci.sys" - - local have_pptp_rule = false - local have_gre_rule = false - - luci.model.uci.cursor():foreach('firewall', 'rule', - function (section) - if section.name == 'pptp' then - have_pptp_rule = true - end - if section.name == 'gre' then - have_gre_rule = true - end - end - ) - - if not have_pptp_rule then - local cursor = luci.model.uci.cursor() - local pptp_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', pptp_rulename, { - ['name'] = 'pptp', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 'tcp', - ['dest_port'] = 1723 - }) - cursor:save('firewall') - cursor:commit('firewall') - end - if not have_gre_rule then - local cursor = luci.model.uci.cursor() - local gre_rulename = cursor:add('firewall','rule') - cursor:tset('firewall', gre_rulename, { - ['name'] = 'gre', - ['target'] = 'ACCEPT', - ['src'] = 'wan', - ['proto'] = 47 - }) - cursor:save('firewall') - cursor:commit('firewall') - end - - -end - - -local pid = luci.util.exec("/usr/bin/pgrep pptpd") - -function pptpd_process_status() - local status = "PPTPD is not running now " - - if pid ~= "" then - status = "PPTPD is running with the PID " .. pid .. "" - end - - local status = { status=status } - local table = { pid=status } - return table -end - -t = mp:section(Table, pptpd_process_status()) -t.anonymous = true - -t:option(DummyValue, "status", translate("PPTPD status")) - -if pid == "" then - start = t:option(Button, "_start", translate("Start")) - start.inputstyle = "apply" - function start.write(self, section) - luci.util.exec("uci set pptpd.pptpd.enabled='1' && uci commit pptpd") - message = luci.util.exec("/etc/init.d/pptpd start 2>&1") - luci.util.exec("sleep 2") - luci.http.redirect( - luci.dispatcher.build_url("admin", "vpn", "pptp-server") .. "?message=" .. message - ) - end -else - stop = t:option(Button, "_stop", translate("Stop")) - stop.inputstyle = "reset" - function stop.write(self, section) - luci.util.exec("uci set pptpd.pptpd.enabled='0' && uci commit pptpd") - luci.util.exec("/etc/init.d/pptpd stop") - luci.util.exec("sleep 2") - luci.http.redirect( - luci.dispatcher.build_url("admin", "vpn", "pptp-server") - ) - end -end - -function mp.on_before_commit (self) - os.execute("rm /var/etc/chap-secrets") -end - -function mp.on_after_commit(self) - os.execute("/etc/init.d/pptpd restart >/dev/null 2>&1 &") -end - - return mp diff --git a/package/lean/luci-app-pptp-server/luasrc/view/pptp/pptp_status.htm b/package/lean/luci-app-pptp-server/luasrc/view/pptp/pptp_status.htm new file mode 100644 index 000000000..11a2852d9 --- /dev/null +++ b/package/lean/luci-app-pptp-server/luasrc/view/pptp/pptp_status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
\ No newline at end of file diff --git a/package/lean/luci-app-pptp-server/po/zh-cn/pptpd.po b/package/lean/luci-app-pptp-server/po/zh-cn/pptp.po similarity index 68% rename from package/lean/luci-app-pptp-server/po/zh-cn/pptpd.po rename to package/lean/luci-app-pptp-server/po/zh-cn/pptp.po index f02496b5b..0c2f78df3 100644 --- a/package/lean/luci-app-pptp-server/po/zh-cn/pptpd.po +++ b/package/lean/luci-app-pptp-server/po/zh-cn/pptp.po @@ -1,3 +1,9 @@ +msgid "Disable from startup" +msgstr "禁止开机启动" + +msgid "Enable on startup" +msgstr "允许开机启动" + msgid "PPTP VPN Server" msgstr "PPTP VPN 服务器" @@ -40,3 +46,11 @@ msgstr "启动" msgid "Stop" msgstr "关闭" +msgid "PPTP VPN Server" +msgstr "PPTP VPN 服务器" + +msgid "PPTP VPN Server connectivity using the native built-in VPN Client on Windows/Linux or Andriod" +msgstr "使用Windows/Linux 或者 Andriod 内置的 PPTP VPN 客户端进行连接 " + + + diff --git a/package/lean/luci-app-pptp-server/root/etc/pptpd.include b/package/lean/luci-app-pptp-server/root/etc/pptpd.include index 3d06066d4..e59a7b7ea 100755 --- a/package/lean/luci-app-pptp-server/root/etc/pptpd.include +++ b/package/lean/luci-app-pptp-server/root/etc/pptpd.include @@ -1,5 +1,5 @@ -iptables -D forwarding_rule -i ppp+ -j ACCEPT -iptables -D forwarding_rule -o ppp+ -j ACCEPT +iptables -D forwarding_rule -i ppp+ -j ACCEPT 2>/dev/null +iptables -D forwarding_rule -o ppp+ -j ACCEPT 2>/dev/null iptables -A forwarding_rule -i ppp+ -j ACCEPT iptables -A forwarding_rule -o ppp+ -j ACCEPT diff --git a/package/lean/luci-app-pptp-server/root/etc/uci-defaults/pptpd b/package/lean/luci-app-pptp-server/root/etc/uci-defaults/pptpd index eaaae9c15..68c9f3e66 100755 --- a/package/lean/luci-app-pptp-server/root/etc/uci-defaults/pptpd +++ b/package/lean/luci-app-pptp-server/root/etc/uci-defaults/pptpd @@ -6,7 +6,29 @@ uci -q batch <<-EOF >/dev/null set firewall.pptpd.type=script set firewall.pptpd.path=/etc/pptpd.include set firewall.pptpd.reload=1 - commit firewall + delete firewall.pptp + add firewall rule + rename firewall.@rule[-1]="pptp" + set firewall.@rule[-1].name="pptp" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="tcp" + set firewall.@rule[-1].dest_port="1723" + delete firewall.gre + add firewall rule + rename firewall.@rule[-1]="gre" + set firewall.@rule[-1].name="gre" + set firewall.@rule[-1].target="ACCEPT" + set firewall.@rule[-1].src="wan" + set firewall.@rule[-1].proto="47" + commit firewall +EOF + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@pptpd[-1] + add ucitrack pptpd + set ucitrack.@pptpd[-1].init=pptpd + commit ucitrack EOF /etc/init.d/pptpd enable && /etc/init.d/pptpd restart diff --git a/package/lean/luci-app-sfe/Makefile b/package/lean/luci-app-sfe/Makefile index 66cc4c440..74af0d83f 100644 --- a/package/lean/luci-app-sfe/Makefile +++ b/package/lean/luci-app-sfe/Makefile @@ -6,10 +6,10 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for SFE -LUCI_DEPENDS:=+kmod-fast-classifier @!LINUX_4_14 +LUCI_DEPENDS:=+kmod-fast-classifier @LINUX_4_9 LUCI_PKGARCH:=all PKG_VERSION:=1.0 -PKG_RELEASE:=3 +PKG_RELEASE:=6 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-sfe/luasrc/controller/sfe.lua b/package/lean/luci-app-sfe/luasrc/controller/sfe.lua index b21a71d26..d50975876 100644 --- a/package/lean/luci-app-sfe/luasrc/controller/sfe.lua +++ b/package/lean/luci-app-sfe/luasrc/controller/sfe.lua @@ -5,7 +5,30 @@ function index() return end local page - page = entry({"admin", "network", "sfe"}, cbi("sfe"), _("SFE Acceleration"), 100) + page = entry({"admin", "network", "sfe"}, cbi("sfe"), _("Turbo ACC Center"), 100) page.i18n = "sfe" page.dependent = true + + entry({"admin", "network", "sfe", "status"}, call("action_status")) end + +local function is_running() + return luci.sys.call("lsmod | grep fast_classifier >/dev/null") == 0 +end + +local function is_bbr() + return luci.sys.call("sysctl net.ipv4.tcp_congestion_control | grep bbr >/dev/null") == 0 +end + +local function is_fullcone() + return luci.sys.call("iptables -t nat -L -n --line-numbers | grep FULLCONENAT >/dev/null") == 0 +end + +function action_status() + luci.http.prepare_content("application/json") + luci.http.write_json({ + run_state = is_running(), + down_state = is_bbr(), + up_state = is_fullcone() + }) +end \ No newline at end of file diff --git a/package/lean/luci-app-sfe/luasrc/model/cbi/sfe.lua b/package/lean/luci-app-sfe/luasrc/model/cbi/sfe.lua index 5ca2d1f82..7d17141b0 100644 --- a/package/lean/luci-app-sfe/luasrc/model/cbi/sfe.lua +++ b/package/lean/luci-app-sfe/luasrc/model/cbi/sfe.lua @@ -1,38 +1,30 @@ -local m,s,o -local SYS = require "luci.sys" - - -if SYS.call("lsmod | grep fast_classifier >/dev/null") == 0 then - Status = translate("Shortcut Forwarding Engine is Running") -else - Status = translate("Shortcut Forwarding Engine is Not Running") -end m = Map("sfe") -m.title = translate("Shortcut Forwarding Engine Acceleration Settings") +m.title = translate("Turbo ACC Acceleration Settings") m.description = translate("Opensource Qualcomm Shortcut FE driver (Fast Path)") +m:append(Template("sfe/status")) + s = m:section(TypedSection, "sfe", "") s.addremove = false s.anonymous = true -s.description = translate(string.format("%s

", Status)) + enable = s:option(Flag, "enabled", translate("Enable")) enable.default = 0 enable.rmempty = false +enable.description = translate("Enable Fast Path offloading for connections. (decrease cpu load / increase routing throughput)") -wifi = s:option(Flag, "wifi", translate("Wireless Acceleration")) +wifi = s:option(Flag, "wifi", translate("Bridge Acceleration")) wifi.default = 0 wifi.rmempty = false -wifi.description = translate("Enable Wireless Bridge Acceleration") +wifi.description = translate("Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN Server)") +wifi:depends("enabled", 1) ipv6 = s:option(Flag, "ipv6", translate("IPv6 Acceleration")) ipv6.default = 0 ipv6.rmempty = false ipv6.description = translate("Enable IPv6 Acceleration") - ---function m.on_after_commit(self) - ---end +ipv6:depends("enabled", 1) return m diff --git a/package/lean/luci-app-sfe/luasrc/view/sfe/status.htm b/package/lean/luci-app-sfe/luasrc/view/sfe/status.htm new file mode 100644 index 000000000..87f09fba2 --- /dev/null +++ b/package/lean/luci-app-sfe/luasrc/view/sfe/status.htm @@ -0,0 +1,21 @@ +
+ <%:Running Status%> + + + + +
SFE 加速状态<%:Collecting data...%>
BBR 加速<%:Collecting data...%>
FULLCONE NAT加速<%:Collecting data...%>
+
+ + diff --git a/package/lean/luci-app-sfe/po/zh-cn/sfe.po b/package/lean/luci-app-sfe/po/zh-cn/sfe.po index 428b86fe1..7505ec8eb 100644 --- a/package/lean/luci-app-sfe/po/zh-cn/sfe.po +++ b/package/lean/luci-app-sfe/po/zh-cn/sfe.po @@ -1,11 +1,11 @@ msgid "SFE Acceleration" msgstr "SFE 转发加速" -msgid "Shortcut Forwarding Engine is Running" -msgstr "SFE 转发加速引擎正在运行" +msgid "Turbo ACC Center" +msgstr "Turbo ACC 网络加速" -msgid "Shortcut Forwarding Engine is Not Running" -msgstr "SFE 转发加速引擎未运行" +msgid "Turbo ACC Acceleration Settings" +msgstr "Turbo ACC 网络加速设置" msgid "Shortcut Forwarding Engine Acceleration Settings" msgstr "SFE 转发加速引擎设置" @@ -16,20 +16,17 @@ msgstr "来自高通开源的 Shortcut FE 转发加速引擎 (Fast Path)" msgid "Enable" msgstr "启用" -msgid "Wireless Acceleration" -msgstr "无线加速" +msgid "Enable Fast Path offloading for connections. (decrease cpu load / increase routing throughput)" +msgstr "开启 Fast Path 转发加速. (降低CPU占用 / 增强路由转发性能,和多WAN或者QOS功能可能会冲突)" -msgid "Enable Wireless Bridge Acceleration" -msgstr "开启无线桥接加速" +msgid "Bridge Acceleration" +msgstr "桥接加速" + +msgid "Enable Bridge Acceleration (may be functional conflict with bridge-mode VPN Server)" +msgstr "启用桥接加速 (可能会和路由器上桥接模式的VPN服务器冲突)" msgid "IPv6 Acceleration" msgstr "IPv6 加速" msgid "Enable IPv6 Acceleration" msgstr "开启IPv6加速" - - - - - - diff --git a/package/lean/luci-app-ssr-plus/Makefile b/package/lean/luci-app-ssr-plus/Makefile new file mode 100644 index 000000000..91f485b87 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/Makefile @@ -0,0 +1,18 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for SSR Plus +LUCI_DEPENDS:=+shadowsocksr-libev +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +bash +pdnsd-alt +wget +LUCI_PKGARCH:=all +PKG_VERSION:=1 +PKG_RELEASE:=5 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature + + diff --git a/package/lean/openwrt-ssr/files/luci/controller/shadowsocksr.lua b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua similarity index 76% rename from package/lean/openwrt-ssr/files/luci/controller/shadowsocksr.lua rename to package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index 2d4caa16e..fe4a44036 100644 --- a/package/lean/openwrt-ssr/files/luci/controller/shadowsocksr.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -1,3 +1,4 @@ +-- Copyright (C) 2017 yushi studio -- Licensed to the public under the GNU General Public License v3. module("luci.controller.shadowsocksr", package.seeall) @@ -7,25 +8,34 @@ function index() return end - if nixio.fs.access("/usr/bin/ssr-redir") - then - entry({"admin", "services", "shadowsocksr"},alias("admin", "services", "shadowsocksr", "client"),_("ShadowSocksR"), 10).dependent = true - entry({"admin", "services", "shadowsocksr", "client"},arcombine(cbi("shadowsocksr/client"), cbi("shadowsocksr/client-config")),_("SSR Client"), 10).leaf = true - elseif nixio.fs.access("/usr/bin/ssr-server") - then - entry({"admin", "services", "shadowsocksr"},alias("admin", "services", "shadowsocksr", "server"),_("ShadowSocksR"), 10).dependent = true - else - return - end + + entry({"admin", "services", "shadowsocksr"},alias("admin", "services", "shadowsocksr", "client"),_("ShadowSocksR Plus+"), 10).dependent = true + + entry({"admin", "services", "shadowsocksr", "client"},cbi("shadowsocksr/client"),_("SSR Client"), 10).leaf = true + + entry({"admin", "services", "shadowsocksr", "servers"}, arcombine(cbi("shadowsocksr/servers"), cbi("shadowsocksr/client-config")),_("Servers Manage"), 20).leaf = true - -entry({"admin", "services", "shadowsocksr", "servers"},cbi("shadowsocksr/servers"),_("Subscription"), 20).leaf = true - - entry({"admin", "services", "shadowsocksr", "status"},cbi("shadowsocksr/status"),_("Status"), 30).leaf = true - entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) + entry({"admin", "services", "shadowsocksr", "control"},cbi("shadowsocksr/control"),_("Access Control"), 30).leaf = true + + entry({"admin", "services", "shadowsocksr", "list"},form("shadowsocksr/list"),_("GFW List"), 40).leaf = true + + entry({"admin", "services", "shadowsocksr", "status"},form("shadowsocksr/status"),_("Status"), 50).leaf = true + + entry({"admin", "services", "shadowsocksr", "check"}, call("check_status")) entry({"admin", "services", "shadowsocksr", "refresh"}, call("refresh_data")) - entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) - + entry({"admin", "services", "shadowsocksr", "checkport"}, call("check_port")) + + entry({"admin", "services", "shadowsocksr", "log"},form("shadowsocksr/log"),_("Log"), 60).leaf = true + + entry({"admin", "services", "shadowsocksr","run"},call("act_status")).leaf=true + +end + +function act_status() + local e={} + e.running=luci.sys.call("pgrep ssr-redir >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) end function check_status() diff --git a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/client-config.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua similarity index 99% rename from package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/client-config.lua rename to package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index eb1ef3292..4d3a8f59a 100644 --- a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/client-config.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -69,7 +69,7 @@ obfs = { } m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) -m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/client") +m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") if m.uci:get(shadowsocksr, sid) ~= "servers" then luci.http.redirect(m.redirect) return diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua new file mode 100644 index 000000000..b3421ad27 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -0,0 +1,73 @@ +-- Copyright (C) 2017 yushi studio github.com/ywb94 +-- Copyright (C) 2018 lean github.com/coolsnowwolf +-- Licensed to the public under the GNU General Public License v3. + +local m, s, sec, o, kcp_enable +local shadowsocksr = "shadowsocksr" +local uci = luci.model.uci.cursor() + +local sys = require "luci.sys" + +m = Map(shadowsocksr, translate("ShadowSocksR Plus+ Settings")) + +m:section(SimpleSection).template = "shadowsocksr/status" + +local server_table = {} +uci:foreach(shadowsocksr, "servers", function(s) + if s.alias then + server_table[s[".name"]] = s.alias + elseif s.server and s.server_port then + server_table[s[".name"]] = "%s:%s" %{s.server, s.server_port} + end +end) + +-- [[ Global Setting ]]-- +s = m:section(TypedSection, "global") +s.anonymous = true + +o = s:option(ListValue, "global_server", translate("Main Server")) +o:value("nil", translate("Disable")) +for k, v in pairs(server_table) do o:value(k, v) end +o.default = "nil" +o.rmempty = false + +o = s:option(ListValue, "udp_relay_server", translate("UDP Relay Server")) +o:value("", translate("Disable")) +o:value("same", translate("Same as Global Server")) +for k, v in pairs(server_table) do o:value(k, v) end + +if nixio.fs.access("/usr/bin/ssr-gfw") then +o = s:option(ListValue, "run_mode", translate("Running Mode")) +o:value("gfw", translate("GFW List Mode")) +o:value("router", translate("IP Route Mode")) +o.default = gfw + +o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode")) +o:depends("run_mode", "gfw") +o:value("1", translate("Use Pdnsd tcp query and cache")) +o:value("0", translate("Use SSR DNS Tunnel")) +o.default = 1 + +o = s:option(Flag, "tunnel_enable", translate("Enable Tunnel(DNS)")) +o:depends("run_mode", "router") +o.default = 0 + +o = s:option(Value, "tunnel_port", translate("Tunnel Port")) +o:depends("run_mode", "router") +o.datatype = "port" +o.default = 5300 +else +o = s:option(Flag, "tunnel_enable", translate("Enable Tunnel(DNS)")) +o.default = 0 + +o = s:option(Value, "tunnel_port", translate("Tunnel Port")) +o.datatype = "port" +o.default = 5300 +end + +o = s:option(Value, "tunnel_forward", translate("Anti-pollution DNS Server")) +o.default = "8.8.4.4:53" +o.rmempty = false +o.description = translate("DNS Server IP:Port") + +return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua new file mode 100644 index 000000000..76015ab87 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua @@ -0,0 +1,44 @@ +local m, s, o + +m = Map("shadowsocksr", translate("IP black-and-white list")) + +s = m:section(TypedSection, "access_control") +s.anonymous = true + +-- Part of WAN +s:tab("wan_ac", translate("WAN IP AC")) + +o = s:taboption("wan_ac", DynamicList, "wan_bp_ips", translate("WAN White List IP")) +o.datatype = "ip4addr" + +o = s:taboption("wan_ac", DynamicList, "wan_fw_ips", translate("WAN Force Proxy IP")) +o.datatype = "ip4addr" + +-- Part of LAN +s:tab("lan_ac", translate("LAN IP AC")) + +o = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Bypassed Host List")) +o.datatype = "ipaddr" +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + o:value(entry.dest:string()) + end +end) + +o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List")) +o.datatype = "ipaddr" +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + o:value(entry.dest:string()) + end +end) + +-- Part of Self +s:tab("self_ac", translate("Router Self AC")) +o = s:taboption("self_ac",ListValue, "router_proxy", translate("Router Self Proxy")) +o:value("1", translatef("Normal Proxy")) +o:value("0", translatef("Bypassed Proxy")) +o:value("2", translatef("Forwarded Proxy")) +o.rmempty = false + +return m \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/list.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/list.lua new file mode 100644 index 000000000..5dd8cab01 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/list.lua @@ -0,0 +1,23 @@ +local fs = require "nixio.fs" +local conffile = "/etc/config/gfw.list" + +f = SimpleForm("custom", translate("GFW Custom List"), translate("Please refer to the following writing")) + +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 13 +function t.cfgvalue() + return fs.readfile(conffile) or "" +end + +function f.handle(self, state, data) + if state == FORM_VALID then + if data.conf then + fs.writefile(conffile, data.conf:gsub("\r\n", "\n")) + luci.sys.call("/usr/share/shadowsocksr/gfw2ipset.sh && /etc/init.d/dnsmasq restart && ipset flush gfwlist") + end + end + return true +end + +return f \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua new file mode 100644 index 000000000..26b651b2a --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua @@ -0,0 +1,14 @@ +local fs = require "nixio.fs" +local conffile = "/tmp/ssrplus.log" + +f = SimpleForm("custom") + +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 20 +function t.cfgvalue() + return fs.readfile(conffile) or "" +end +t.readonly="readonly" + +return f \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua new file mode 100644 index 000000000..54e7f949b --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua @@ -0,0 +1,81 @@ +-- Licensed to the public under the GNU General Public License v3. + +local m, s, o +local shadowsocksr = "shadowsocksr" + +m = Map(shadowsocksr, translate("Servers subscription and manage")) + +-- Server Subscribe + +s = m:section(TypedSection, "server_subscribe") +s.anonymous = true + +o = s:option(Flag, "auto_update", translate("Auto Update")) +o.rmempty = false +o.description = translate("Auto Update Server subscription, GFW list and CHN route") + + +o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=2 +o.rmempty = false + +o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL")) +o.rmempty = true + +o = s:option(Flag, "proxy", translate("Through proxy update")) +o.rmempty = false +o.description = translate("Through proxy update list, Not Recommended ") + +o = s:option(Button,"update",translate("Update")) +o.inputstyle = "reload" +o.write = function() + luci.sys.call("nohup bash /usr/share/shadowsocksr/subscribe.sh > /tmp/subupdate.log 2>&1 &") + luci.sys.call("sleep 5") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) +end + + +-- [[ Servers Manage ]]-- +s = m:section(TypedSection, "servers") +s.anonymous = true +s.addremove = true +s.sortable = false +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/servers/%s") +function s.create(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(s.extedit % sid) + return + end +end + +o = s:option(DummyValue, "alias", translate("Alias")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "server", translate("Server Address")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + +o = s:option(DummyValue, "server_port", translate("Server Port")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + +o = s:option(DummyValue, "kcp_enable", translate("KcpTun")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "?" +end + +o = s:option(DummyValue, "switch_enable", translate("Auto Switch")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or "0" +end + +return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua new file mode 100644 index 000000000..bcc108f38 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua @@ -0,0 +1,150 @@ +-- Copyright (C) 2017 yushi studio +-- Licensed to the public under the GNU General Public License v3. + +local IPK_Version="3.0.9" +local m, s, o +local redir_run=0 +local reudp_run=0 +local sock5_run=0 +local server_run=0 +local kcptun_run=0 +local tunnel_run=0 +local udp2raw_run=0 +local udpspeeder_run=0 +local gfw_count=0 +local ad_count=0 +local ip_count=0 +local gfwmode=0 + +if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then +gfwmode=1 +end + +local shadowsocksr = "shadowsocksr" +-- html constants +font_blue = [[]] +font_off = [[]] +bold_on = [[]] +bold_off = [[]] + +local fs = require "nixio.fs" +local sys = require "luci.sys" +local kcptun_version=translate("Unknown") +local kcp_file="/usr/bin/ssr-kcptun" +if not fs.access(kcp_file) then + kcptun_version=translate("Not exist") +else + if not fs.access(kcp_file, "rwx", "rx", "rx") then + fs.chmod(kcp_file, 755) + end + kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'") + if not kcptun_version or kcptun_version == "" then + kcptun_version = translate("Unknown") + end + +end + +if gfwmode==1 then + gfw_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2 + if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then + ad_count=tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")) + end +end + +if nixio.fs.access("/etc/china_ssr.txt") then + ip_count = sys.exec("cat /etc/china_ssr.txt | wc -l") +end + +local icount=sys.exec("ps -w | grep ssr-reudp |grep -v grep| wc -l") +if tonumber(icount)>0 then +reudp_run=1 +else +icount=sys.exec("ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") +if tonumber(icount)>0 then +reudp_run=1 +end +end + + +if luci.sys.call("pidof ssr-redir >/dev/null") == 0 then +redir_run=1 +end + +if luci.sys.call("pidof ssr-kcptun >/dev/null") == 0 then +kcptun_run=1 +end + +if luci.sys.call("pidof ssr-server >/dev/null") == 0 then +server_run=1 +end + +if luci.sys.call("ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then +tunnel_run=1 +end + +m = SimpleForm("Version") +m.reset = false +m.submit = false + +s=m:field(DummyValue,"redir_run",translate("Global Client")) +s.rawhtml = true +if redir_run == 1 then +s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off +else +s.value = translate("Not Running") +end + +s=m:field(DummyValue,"reudp_run",translate("UDP Relay")) +s.rawhtml = true +if reudp_run == 1 then +s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off +else +s.value = translate("Not Running") +end + +s=m:field(DummyValue,"tunnel_run",translate("DNS Tunnel")) +s.rawhtml = true +if tunnel_run == 1 then +s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off +else +s.value = translate("Not Running") +end + +s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) +s.rawhtml = true +s.value =kcptun_version + +s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) +s.rawhtml = true +if kcptun_run == 1 then +s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off +else +s.value = translate("Not Running") +end + +s=m:field(DummyValue,"google",translate("Google Connectivity")) +s.value = translate("No Check") +s.template = "shadowsocksr/check" + +s=m:field(DummyValue,"baidu",translate("Baidu Connectivity")) +s.value = translate("No Check") +s.template = "shadowsocksr/check" + +if gfwmode==1 then +s=m:field(DummyValue,"gfw_data",translate("GFW List Data")) +s.rawhtml = true +s.template = "shadowsocksr/refresh" +s.value =tostring(math.ceil(gfw_count)) .. " " .. translate("Records") + +end + +s=m:field(DummyValue,"ip_data",translate("China IP Data")) +s.rawhtml = true +s.template = "shadowsocksr/refresh" +s.value =ip_count .. " " .. translate("Records") + +s=m:field(DummyValue,"check_port",translate("Check Server Port")) +s.template = "shadowsocksr/checkport" +s.value =translate("No Check") + +return m diff --git a/package/lean/openwrt-ssr/files/luci/view/shadowsocksr/check.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm similarity index 100% rename from package/lean/openwrt-ssr/files/luci/view/shadowsocksr/check.htm rename to package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/check.htm diff --git a/package/lean/openwrt-ssr/files/luci/view/shadowsocksr/checkport.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm similarity index 100% rename from package/lean/openwrt-ssr/files/luci/view/shadowsocksr/checkport.htm rename to package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/checkport.htm diff --git a/package/lean/openwrt-ssr/files/luci/view/shadowsocksr/refresh.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm similarity index 100% rename from package/lean/openwrt-ssr/files/luci/view/shadowsocksr/refresh.htm rename to package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/refresh.htm diff --git a/package/lean/openwrt-ssr/files/luci/view/shadowsocksr/ssrurl.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm similarity index 100% rename from package/lean/openwrt-ssr/files/luci/view/shadowsocksr/ssrurl.htm rename to package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm diff --git a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm new file mode 100644 index 000000000..0dab4d550 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/status.htm @@ -0,0 +1,22 @@ + + +
+

+ <%:Collecting data...%> +

+
diff --git a/package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.po b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po similarity index 79% rename from package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.po rename to package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po index 005532fe4..af1d31adb 100644 --- a/package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.po +++ b/package/lean/luci-app-ssr-plus/po/zh-cn/ssr-plus.po @@ -218,7 +218,7 @@ msgid "Running Mode" msgstr "运行模式" msgid "IP Route Mode" -msgstr "IP路由模式" +msgstr "绕过中国大陆IP模式" msgid "GFW List Mode" msgstr "GFW列表模式" @@ -353,8 +353,8 @@ msgstr "无法复制SSR网址到剪贴板。" msgid "Copy SSR to clipboard successfully." msgstr "成功复制SSR网址到剪贴板。" -msgid "Subscription" -msgstr "订阅" +msgid "Servers Manage" +msgstr "服务器管理" msgid "Auto Update" msgstr "自动更新" @@ -362,13 +362,80 @@ msgstr "自动更新" msgid "Through proxy update" msgstr "通过代理更新" +msgid "GFW List" +msgstr "GFW列表" + +msgid "ShadowSocksR Plus+ Settings" +msgstr "ShadowSocksR Plus+ 设置" + +msgid "Main Server" +msgstr "主服务器" + +msgid "Anti-pollution DNS Server" +msgstr "访问国外域名DNS服务器" + +msgid "Use Pdnsd tcp query and cache" +msgstr "使用PDNSD TCP查询并缓存" + +msgid "DNS Server IP:Port" +msgstr "DNS服务器 IP:Port" + msgid "Update time (every day)" -msgstr "更新时间 (每天)" +msgstr "更新时间 (每天)" + +msgid "Auto Update Server subscription, GFW list and CHN route" +msgstr "自动更新服务器订阅、GFW列表和 CHN路由表" msgid "Subscribe URL" -msgstr "订阅链接" +msgstr "SSR服务器订阅URL地址" msgid "Update" msgstr "更新" +msgid "IP black-and-white list" +msgstr "IP黑白名单" +msgid "WAN IP AC" +msgstr "WAN IP访问控制" + +msgid "WAN White List IP" +msgstr "不走代理的WAN IP" + +msgid "WAN Force Proxy IP" +msgstr "强制走代理的WAN IP" + +msgid "LAN Bypassed Host List" +msgstr "不走代理的局域网 LAN IP" + +msgid "LAN Force Proxy Host List" +msgstr "全局代理的LAN IP" + +msgid "Router Self AC" +msgstr "路由器自身代理设置" + +msgid "Router Self Proxy" +msgstr "路由器自身代理方式" + +msgid "Normal Proxy" +msgstr "跟随全局设置" + +msgid "Bypassed Proxy" +msgstr "不走代理" + +msgid "Forwarded Proxy" +msgstr "全局代理" + +msgid "GFW Custom List" +msgstr "GFW 用户自定义列表" + +msgid "Please refer to the following writing" +msgstr "每行一个域名,无需写前面的 HTTP(S):// ,提交后即时生效" + +msgid "Servers subscription and manage" +msgstr "服务器节点订阅与管理(支持订阅和手动导入SSR链接)" + +msgid "Through proxy update list, Not Recommended" +msgstr "通过路由器自身代理更新订阅(不推荐)" + +msgid "LAN IP AC" +msgstr "LAN IP访问控制" diff --git a/package/lean/openwrt-ssr/files/china_ssr.txt b/package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt similarity index 91% rename from package/lean/openwrt-ssr/files/china_ssr.txt rename to package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt index 349767431..0f44ee7b4 100644 --- a/package/lean/openwrt-ssr/files/china_ssr.txt +++ b/package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt @@ -53,7 +53,10 @@ 1.88.0.0/14 1.92.0.0/15 1.94.0.0/15 -1.116.0.0/14 +1.116.0.0/15 +1.118.0.0/16 +1.119.0.0/17 +1.119.128.0/17 1.180.0.0/14 1.184.0.0/15 1.188.0.0/14 @@ -76,8 +79,6 @@ 14.130.0.0/15 14.134.0.0/15 14.144.0.0/12 -14.192.4.0/22 -14.192.56.0/22 14.192.60.0/22 14.192.76.0/22 14.196.0.0/15 @@ -157,7 +158,7 @@ 36.255.164.0/22 36.255.172.0/22 36.255.176.0/22 -36.255.192.0/22 +36.255.220.0/22 39.0.0.0/24 39.0.2.0/23 39.0.4.0/22 @@ -233,7 +234,8 @@ 42.156.64.0/18 42.156.128.0/17 42.157.0.0/16 -42.158.0.0/15 +42.158.0.0/16 +42.159.0.0/16 42.160.0.0/12 42.176.0.0/13 42.184.0.0/15 @@ -283,7 +285,6 @@ 43.224.208.0/22 43.224.212.0/22 43.224.216.0/22 -43.224.224.0/22 43.224.240.0/22 43.225.76.0/22 43.225.84.0/22 @@ -424,7 +425,6 @@ 43.228.148.0/22 43.228.152.0/22 43.228.188.0/22 -43.228.240.0/22 43.229.16.0/22 43.229.40.0/22 43.229.48.0/22 @@ -463,7 +463,6 @@ 43.230.244.0/22 43.230.248.0/22 43.230.252.0/22 -43.231.12.0/22 43.231.32.0/22 43.231.36.0/22 43.231.40.0/22 @@ -956,6 +955,7 @@ 43.251.8.0/22 43.251.12.0/22 43.251.36.0/22 +43.251.100.0/22 43.251.116.0/22 43.251.192.0/22 43.251.232.0/22 @@ -1030,6 +1030,7 @@ 43.255.228.0/22 43.255.232.0/22 43.255.244.0/22 +45.40.192.0/18 45.65.16.0/22 45.65.20.0/22 45.65.24.0/22 @@ -1052,7 +1053,6 @@ 45.113.52.0/22 45.113.56.0/22 45.113.72.0/22 -45.113.108.0/22 45.113.144.0/22 45.113.148.0/22 45.113.168.0/22 @@ -1064,7 +1064,6 @@ 45.113.212.0/22 45.113.216.0/22 45.113.220.0/22 -45.113.228.0/22 45.113.240.0/22 45.113.252.0/22 45.114.0.0/22 @@ -1074,11 +1073,12 @@ 45.114.52.0/22 45.114.96.0/22 45.114.104.0/22 +45.114.108.0/22 +45.114.124.0/22 45.114.136.0/22 45.114.196.0/22 45.114.200.0/22 45.114.228.0/22 -45.114.236.0/22 45.114.252.0/22 45.115.44.0/22 45.115.100.0/22 @@ -1089,20 +1089,16 @@ 45.115.164.0/22 45.115.200.0/22 45.115.212.0/22 -45.115.216.0/22 45.115.228.0/22 45.115.236.0/22 45.115.244.0/22 45.115.248.0/22 45.116.12.0/22 45.116.16.0/22 -45.116.20.0/22 45.116.24.0/22 45.116.32.0/22 45.116.36.0/22 45.116.52.0/22 -45.116.60.0/22 -45.116.64.0/22 45.116.96.0/22 45.116.100.0/22 45.116.140.0/22 @@ -1110,7 +1106,6 @@ 45.116.208.0/22 45.117.8.0/22 45.117.20.0/22 -45.117.40.0/22 45.117.68.0/22 45.117.124.0/22 45.117.252.0/22 @@ -1124,7 +1119,6 @@ 45.119.232.0/22 45.120.100.0/22 45.120.140.0/22 -45.120.156.0/22 45.120.164.0/22 45.120.220.0/22 45.120.240.0/22 @@ -1163,8 +1157,7 @@ 45.122.84.0/22 45.122.88.0/22 45.122.92.0/22 -45.122.96.0/22 -45.122.100.0/22 +45.122.96.0/21 45.122.104.0/22 45.122.108.0/22 45.122.112.0/22 @@ -1266,7 +1259,6 @@ 45.126.220.0/22 45.127.8.0/22 45.127.12.0/22 -45.127.36.0/22 45.127.96.0/22 45.127.116.0/22 45.127.124.0/22 @@ -1382,6 +1374,7 @@ 45.251.216.0/22 45.251.220.0/22 45.251.224.0/22 +45.251.240.0/22 45.252.0.0/22 45.252.4.0/22 45.252.8.0/22 @@ -1461,7 +1454,6 @@ 45.253.112.0/22 45.253.116.0/22 45.253.120.0/22 -45.253.130.0/23 45.253.132.0/22 45.253.136.0/22 45.253.140.0/22 @@ -1633,9 +1625,9 @@ 49.239.0.0/18 49.239.192.0/18 49.246.224.0/19 -52.80.0.0/16 -52.81.0.0/16 +52.80.0.0/15 52.82.0.0/15 +52.130.0.0/15 54.222.0.0/15 58.14.0.0/15 58.16.0.0/16 @@ -1881,13 +1873,27 @@ 61.232.0.0/14 61.236.0.0/15 61.240.0.0/14 +62.234.0.0/16 +68.79.0.0/18 +69.230.192.0/18 +69.231.128.0/18 +69.234.192.0/18 +69.235.128.0/18 +71.131.192.0/18 +71.132.0.0/18 +71.136.64.0/18 +71.137.0.0/18 +81.68.0.0/14 +82.156.0.0/15 +94.191.0.0/17 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 101.32.0.0/14 -101.36.0.0/16 +101.36.0.0/17 +101.36.128.0/17 101.37.0.0/16 101.38.0.0/15 101.40.0.0/13 @@ -2006,12 +2012,10 @@ 103.5.252.0/22 103.6.76.0/22 103.6.108.0/22 -103.6.120.0/22 103.6.220.0/22 103.6.228.0/22 103.7.4.0/22 103.7.28.0/22 -103.7.120.0/22 103.7.140.0/22 103.7.212.0/22 103.7.216.0/22 @@ -2057,7 +2061,6 @@ 103.14.32.0/22 103.14.84.0/22 103.14.100.0/22 -103.14.112.0/22 103.14.132.0/22 103.14.136.0/22 103.14.156.0/22 @@ -2173,7 +2176,6 @@ 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 -103.26.116.0/22 103.26.132.0/22 103.26.156.0/22 103.26.160.0/22 @@ -2193,7 +2195,6 @@ 103.28.184.0/22 103.28.204.0/22 103.28.212.0/22 -103.29.0.0/22 103.29.16.0/22 103.29.128.0/22 103.29.132.0/22 @@ -2498,7 +2499,6 @@ 103.38.116.0/22 103.38.132.0/22 103.38.140.0/22 -103.38.220.0/22 103.38.224.0/22 103.38.228.0/22 103.38.232.0/22 @@ -2718,7 +2718,6 @@ 103.47.136.0/22 103.47.140.0/22 103.47.212.0/22 -103.47.248.0/22 103.48.20.0/22 103.48.52.0/22 103.48.92.0/22 @@ -2805,7 +2804,6 @@ 103.53.136.0/22 103.53.140.0/22 103.53.144.0/22 -103.53.160.0/22 103.53.180.0/22 103.53.204.0/22 103.53.208.0/22 @@ -2819,7 +2817,6 @@ 103.54.160.0/22 103.54.164.0/22 103.54.212.0/22 -103.54.228.0/22 103.54.240.0/22 103.55.24.0/22 103.55.80.0/22 @@ -2830,7 +2827,6 @@ 103.55.208.0/22 103.55.228.0/22 103.55.236.0/22 -103.55.240.0/22 103.56.8.0/22 103.56.16.0/22 103.56.20.0/22 @@ -2840,22 +2836,17 @@ 103.56.60.0/22 103.56.72.0/22 103.56.76.0/22 -103.56.100.0/22 -103.56.104.0/22 103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 103.56.200.0/22 -103.56.216.0/22 103.57.12.0/22 103.57.52.0/22 103.57.56.0/22 103.57.76.0/22 -103.57.108.0/22 103.57.136.0/22 103.57.196.0/22 103.58.24.0/22 -103.58.182.0/23 103.59.76.0/22 103.59.100.0/22 103.59.112.0/22 @@ -3026,12 +3017,6 @@ 103.65.104.0/22 103.65.108.0/22 103.65.112.0/22 -103.65.116.0/22 -103.65.120.0/22 -103.65.124.0/22 -103.65.128.0/22 -103.65.132.0/22 -103.65.136.0/22 103.65.144.0/22 103.65.148.0/22 103.65.152.0/22 @@ -3053,21 +3038,6 @@ 103.67.0.0/22 103.67.4.0/22 103.67.8.0/22 -103.67.40.0/22 -103.67.44.0/22 -103.67.48.0/22 -103.67.52.0/22 -103.67.56.0/22 -103.67.60.0/22 -103.67.64.0/22 -103.67.68.0/22 -103.67.72.0/22 -103.67.76.0/22 -103.67.80.0/22 -103.67.84.0/22 -103.67.88.0/22 -103.67.92.0/22 -103.67.96.0/22 103.67.100.0/22 103.67.104.0/22 103.67.108.0/22 @@ -3136,7 +3106,6 @@ 103.72.132.0/22 103.72.144.0/22 103.72.148.0/22 -103.72.164.0/22 103.72.172.0/22 103.72.180.0/22 103.72.224.0/22 @@ -3189,7 +3158,6 @@ 103.74.204.0/22 103.74.232.0/22 103.75.16.0/22 -103.75.84.0/22 103.75.88.0/22 103.75.92.0/22 103.75.104.0/22 @@ -3259,7 +3227,6 @@ 103.80.184.0/22 103.80.192.0/22 103.80.200.0/22 -103.80.212.0/22 103.80.232.0/22 103.81.4.0/22 103.81.8.0/22 @@ -3276,6 +3243,585 @@ 103.81.184.0/22 103.81.200.0/22 103.81.232.0/22 +103.82.52.0/22 +103.82.60.0/22 +103.82.68.0/22 +103.82.84.0/22 +103.82.104.0/22 +103.82.224.0/22 +103.82.236.0/22 +103.83.44.0/22 +103.83.52.0/22 +103.83.60.0/22 +103.83.64.0/22 +103.83.72.0/22 +103.83.112.0/22 +103.83.120.0/22 +103.83.180.0/22 +103.84.0.0/22 +103.84.12.0/22 +103.84.16.0/22 +103.84.20.0/22 +103.84.24.0/22 +103.84.28.0/22 +103.84.48.0/22 +103.84.64.0/22 +103.84.72.0/22 +103.84.92.0/22 +103.84.108.0/22 +103.84.136.0/22 +103.85.20.0/22 +103.85.24.0/22 +103.85.44.0/22 +103.85.48.0/22 +103.85.84.0/22 +103.85.136.0/22 +103.85.144.0/22 +103.85.164.0/22 +103.85.168.0/22 +103.85.172.0/22 +103.85.176.0/22 +103.85.224.0/22 +103.86.28.0/22 +103.86.32.0/22 +103.86.44.0/22 +103.86.60.0/22 +103.86.68.0/22 +103.86.80.0/22 +103.86.84.0/22 +103.86.88.0/22 +103.86.204.0/22 +103.86.208.0/22 +103.86.212.0/22 +103.86.216.0/22 +103.86.220.0/22 +103.86.224.0/22 +103.86.228.0/22 +103.86.232.0/22 +103.86.236.0/22 +103.86.240.0/22 +103.86.244.0/22 +103.86.248.0/22 +103.86.252.0/22 +103.87.0.0/22 +103.87.4.0/22 +103.87.20.0/22 +103.87.32.0/22 +103.87.72.0/22 +103.87.96.0/22 +103.87.132.0/22 +103.87.180.0/22 +103.87.224.0/22 +103.88.4.0/22 +103.88.8.0/22 +103.88.12.0/22 +103.88.16.0/22 +103.88.20.0/22 +103.88.32.0/22 +103.88.36.0/22 +103.88.60.0/22 +103.88.64.0/22 +103.88.72.0/22 +103.88.96.0/22 +103.88.100.0/22 +103.88.164.0/22 +103.88.176.0/22 +103.88.184.0/22 +103.88.188.0/22 +103.88.212.0/22 +103.89.28.0/22 +103.89.96.0/22 +103.89.100.0/22 +103.89.104.0/22 +103.89.108.0/22 +103.89.112.0/22 +103.89.116.0/22 +103.89.148.0/22 +103.89.172.0/22 +103.89.184.0/22 +103.89.188.0/22 +103.89.192.0/22 +103.89.196.0/22 +103.89.200.0/22 +103.89.204.0/22 +103.89.208.0/22 +103.89.212.0/22 +103.89.216.0/22 +103.89.220.0/22 +103.89.224.0/22 +103.89.228.0/22 +103.90.52.0/22 +103.90.92.0/22 +103.90.100.0/22 +103.90.104.0/22 +103.90.108.0/22 +103.90.112.0/22 +103.90.116.0/22 +103.90.120.0/22 +103.90.124.0/22 +103.90.128.0/22 +103.90.132.0/22 +103.90.152.0/22 +103.90.168.0/22 +103.90.173.0/24 +103.90.176.0/22 +103.90.188.0/22 +103.90.192.0/22 +103.91.36.0/22 +103.91.40.0/22 +103.91.108.0/22 +103.91.152.0/22 +103.91.176.0/22 +103.91.200.0/22 +103.91.208.0/22 +103.91.212.0/22 +103.91.219.0/24 +103.91.236.0/22 +103.91.252.0/22 +103.92.0.0/22 +103.92.4.0/22 +103.92.8.0/22 +103.92.12.0/22 +103.92.48.0/22 +103.92.52.0/22 +103.92.56.0/22 +103.92.60.0/22 +103.92.64.0/22 +103.92.68.0/22 +103.92.72.0/22 +103.92.76.0/22 +103.92.80.0/22 +103.92.86.0/24 +103.92.88.0/22 +103.92.108.0/22 +103.92.124.0/22 +103.92.128.0/24 +103.92.132.0/22 +103.92.156.0/22 +103.92.164.0/22 +103.92.168.0/22 +103.92.172.0/22 +103.92.176.0/22 +103.92.180.0/22 +103.92.184.0/22 +103.92.188.0/22 +103.92.192.0/22 +103.92.236.0/22 +103.92.240.0/22 +103.92.244.0/22 +103.92.248.0/22 +103.92.252.0/22 +103.93.0.0/22 +103.93.4.0/22 +103.93.28.0/22 +103.93.76.0/22 +103.93.84.0/22 +103.93.121.0/24 +103.93.152.0/22 +103.93.180.0/22 +103.93.204.0/22 +103.94.12.0/22 +103.94.20.0/22 +103.94.28.0/22 +103.94.32.0/22 +103.94.36.0/22 +103.94.40.0/22 +103.94.44.0/22 +103.94.72.0/22 +103.94.88.0/22 +103.94.116.0/22 +103.94.160.0/22 +103.94.180.0/22 +103.94.200.0/22 +103.95.28.0/22 +103.95.52.0/22 +103.95.64.0/22 +103.95.68.0/22 +103.95.88.0/22 +103.95.92.0/22 +103.95.116.0/22 +103.95.128.0/22 +103.95.136.0/22 +103.95.140.0/22 +103.95.144.0/22 +103.95.152.0/22 +103.95.207.0/24 +103.95.216.0/22 +103.95.220.0/22 +103.95.224.0/22 +103.95.236.0/22 +103.95.240.0/22 +103.95.244.0/22 +103.95.248.0/22 +103.95.252.0/22 +103.96.0.0/22 +103.96.8.0/22 +103.96.80.0/22 +103.96.124.0/22 +103.96.136.0/22 +103.96.140.0/24 +103.96.148.0/22 +103.96.152.0/22 +103.96.156.0/22 +103.96.160.0/22 +103.96.164.0/22 +103.96.168.0/22 +103.96.172.0/22 +103.96.176.0/22 +103.96.180.0/22 +103.96.184.0/22 +103.96.188.0/22 +103.96.192.0/22 +103.96.196.0/22 +103.96.200.0/22 +103.96.204.0/22 +103.96.208.0/22 +103.96.212.0/22 +103.96.216.0/22 +103.97.8.0/22 +103.97.12.0/22 +103.97.16.0/22 +103.97.20.0/22 +103.97.24.0/22 +103.97.28.0/22 +103.97.32.0/22 +103.97.36.0/22 +103.97.40.0/22 +103.97.56.0/22 +103.97.60.0/22 +103.97.64.0/22 +103.97.68.0/22 +103.97.72.0/22 +103.97.80.0/22 +103.97.112.0/22 +103.97.116.0/22 +103.97.128.0/22 +103.97.144.0/22 +103.97.148.0/22 +103.97.188.0/22 +103.97.192.0/22 +103.97.224.0/22 +103.97.228.0/23 +103.98.28.0/23 +103.98.40.0/22 +103.98.44.0/22 +103.98.48.0/22 +103.98.56.0/22 +103.98.80.0/22 +103.98.88.0/22 +103.98.92.0/22 +103.98.96.0/22 +103.98.100.0/22 +103.98.124.0/22 +103.98.136.0/22 +103.98.140.0/22 +103.98.144.0/22 +103.98.164.0/22 +103.98.168.0/22 +103.98.180.0/22 +103.98.196.0/22 +103.98.216.0/22 +103.98.220.0/22 +103.98.224.0/22 +103.98.228.0/22 +103.98.232.0/22 +103.98.240.0/22 +103.98.244.0/22 +103.98.248.0/22 +103.98.252.0/22 +103.99.40.0/23 +103.99.52.0/22 +103.99.56.0/22 +103.99.60.0/22 +103.99.76.0/22 +103.99.104.0/22 +103.99.116.0/22 +103.99.120.0/22 +103.99.152.0/22 +103.99.220.0/22 +103.99.232.0/22 +103.99.236.0/22 +103.100.0.0/22 +103.100.32.0/22 +103.100.40.0/22 +103.100.48.0/22 +103.100.52.0/22 +103.100.56.0/22 +103.100.60.0/22 +103.100.64.0/22 +103.100.68.0/22 +103.100.88.0/22 +103.100.116.0/22 +103.100.140.0/22 +103.100.144.0/22 +103.100.236.0/22 +103.100.240.0/22 +103.100.248.0/22 +103.100.252.0/22 +103.101.4.0/22 +103.101.8.0/22 +103.101.12.0/22 +103.101.28.0/22 +103.101.60.0/22 +103.101.120.0/22 +103.101.124.0/22 +103.101.144.0/22 +103.101.148.0/22 +103.101.153.0/24 +103.101.180.0/22 +103.101.184.0/22 +103.102.76.0/22 +103.102.80.0/22 +103.102.168.0/22 +103.102.172.0/22 +103.102.180.0/22 +103.102.184.0/22 +103.102.188.0/22 +103.102.192.0/22 +103.102.196.0/22 +103.102.200.0/22 +103.102.208.0/22 +103.102.212.0/22 +103.103.12.0/22 +103.103.16.0/22 +103.103.36.0/22 +103.103.68.0/22 +103.103.72.0/22 +103.103.176.0/22 +103.103.188.0/22 +103.103.200.0/22 +103.103.204.0/22 +103.103.220.0/22 +103.103.224.0/22 +103.103.228.0/22 +103.103.232.0/22 +103.103.248.0/22 +103.103.252.0/22 +103.104.0.0/22 +103.104.4.0/22 +103.104.36.0/22 +103.104.40.0/22 +103.104.64.0/22 +103.104.104.0/22 +103.104.152.0/22 +103.104.168.0/22 +103.104.172.0/22 +103.104.188.0/22 +103.104.198.0/23 +103.104.252.0/22 +103.105.0.0/22 +103.105.4.0/22 +103.105.12.0/22 +103.105.16.0/22 +103.105.23.0/24 +103.105.56.0/22 +103.105.60.0/22 +103.105.116.0/22 +103.105.132.0/22 +103.105.180.0/22 +103.105.184.0/22 +103.105.200.0/22 +103.105.204.0/22 +103.105.220.0/22 +103.106.36.0/22 +103.106.40.0/22 +103.106.44.0/22 +103.106.60.0/22 +103.106.68.0/22 +103.106.96.0/22 +103.106.120.0/22 +103.106.128.0/22 +103.106.132.0/22 +103.106.160.0/22 +103.106.188.0/22 +103.106.196.0/22 +103.106.202.0/23 +103.106.212.0/22 +103.106.244.0/22 +103.106.252.0/22 +103.107.0.0/22 +103.107.8.0/24 +103.107.28.0/22 +103.107.32.0/22 +103.107.44.0/22 +103.107.72.0/22 +103.107.108.0/22 +103.107.164.0/22 +103.107.168.0/22 +103.107.188.0/22 +103.107.192.0/22 +103.107.208.0/22 +103.107.212.0/22 +103.107.216.0/22 +103.107.220.0/22 +103.108.52.0/22 +103.108.64.0/22 +103.108.160.0/22 +103.108.164.0/22 +103.108.184.0/23 +103.108.188.0/23 +103.108.192.0/22 +103.108.196.0/22 +103.108.208.0/22 +103.108.212.0/22 +103.108.224.0/22 +103.108.244.0/22 +103.108.251.0/24 +103.109.20.0/22 +103.109.48.0/22 +103.109.88.0/22 +103.109.106.0/23 +103.109.248.0/22 +103.110.32.0/22 +103.110.80.0/23 +103.110.92.0/22 +103.110.100.0/22 +103.110.116.0/22 +103.110.127.0/24 +103.110.128.0/23 +103.110.131.0/24 +103.110.132.0/22 +103.110.136.0/22 +103.110.152.0/22 +103.110.156.0/22 +103.110.188.0/22 +103.110.204.0/22 +103.111.38.0/23 +103.111.64.0/22 +103.111.172.0/22 +103.111.252.0/22 +103.112.28.0/22 +103.112.68.0/22 +103.112.72.0/22 +103.112.88.0/22 +103.112.92.0/22 +103.112.96.0/22 +103.112.108.0/22 +103.112.112.0/22 +103.112.116.0/22 +103.112.140.0/22 +103.112.172.0/22 +103.112.184.0/22 +103.112.208.0/22 +103.113.4.0/22 +103.113.92.0/22 +103.113.144.0/22 +103.113.220.0/22 +103.113.232.0/22 +103.113.236.0/22 +103.114.4.0/22 +103.114.28.0/22 +103.114.68.0/22 +103.114.72.0/22 +103.114.100.0/22 +103.114.132.0/22 +103.114.148.0/22 +103.114.156.0/22 +103.114.176.0/22 +103.114.212.0/22 +103.114.236.0/22 +103.114.240.0/22 +103.115.16.0/22 +103.115.40.0/22 +103.115.44.0/22 +103.115.48.0/22 +103.115.52.0/22 +103.115.56.0/22 +103.115.60.0/22 +103.115.64.0/22 +103.115.68.0/22 +103.115.92.0/22 +103.115.120.0/22 +103.115.148.0/22 +103.115.204.0/23 +103.115.248.0/22 +103.116.20.0/22 +103.116.40.0/22 +103.116.64.0/22 +103.116.72.0/22 +103.116.76.0/22 +103.116.92.0/22 +103.116.120.0/22 +103.116.128.0/22 +103.116.132.0/23 +103.116.148.0/22 +103.116.184.0/22 +103.116.206.0/23 +103.116.220.0/22 +103.116.224.0/22 +103.116.228.0/22 +103.117.16.0/22 +103.117.72.0/22 +103.117.88.0/22 +103.117.132.0/22 +103.117.136.0/22 +103.117.188.0/22 +103.117.220.0/22 +103.118.19.0/24 +103.118.36.0/22 +103.118.52.0/22 +103.118.56.0/22 +103.118.60.0/22 +103.118.64.0/22 +103.118.68.0/22 +103.118.72.0/22 +103.118.88.0/22 +103.118.173.0/24 +103.118.192.0/22 +103.118.196.0/22 +103.118.200.0/22 +103.118.204.0/22 +103.118.208.0/22 +103.118.212.0/22 +103.118.216.0/22 +103.118.220.0/22 +103.118.240.0/22 +103.118.244.0/22 +103.118.248.0/22 +103.118.252.0/22 +103.119.0.0/22 +103.119.12.0/22 +103.119.16.0/22 +103.119.28.0/22 +103.119.44.0/22 +103.119.104.0/22 +103.119.115.0/24 +103.119.156.0/22 +103.119.180.0/22 +103.119.200.0/22 +103.119.224.0/22 +103.120.52.0/22 +103.120.72.0/22 +103.120.76.0/24 +103.120.88.0/22 +103.120.96.0/22 +103.120.100.0/22 +103.120.140.0/22 +103.120.196.0/22 +103.120.224.0/22 +103.121.52.0/22 +103.121.92.0/22 +103.121.160.0/22 +103.121.164.0/22 +103.121.250.0/24 +103.121.252.0/22 +103.122.48.0/22 +103.122.176.0/22 +103.122.192.0/22 +103.122.240.0/22 +103.123.4.0/22 +103.123.56.0/22 +103.123.88.0/22 +103.123.92.0/22 +103.123.116.0/22 +103.123.160.0/22 +103.123.176.0/22 +103.123.200.0/22 +103.123.204.0/22 +103.123.208.0/22 +103.123.212.0/22 +103.129.52.0/22 +103.129.148.0/22 103.192.0.0/22 103.192.4.0/22 103.192.8.0/22 @@ -3325,7 +3871,6 @@ 103.193.236.0/22 103.193.240.0/22 103.194.16.0/22 -103.194.230.0/23 103.195.104.0/22 103.195.112.0/22 103.195.136.0/22 @@ -3343,7 +3888,6 @@ 103.196.204.0/22 103.197.180.0/22 103.197.228.0/22 -103.197.252.0/22 103.198.20.0/22 103.198.60.0/22 103.198.64.0/22 @@ -3590,8 +4134,8 @@ 103.209.200.0/22 103.209.208.0/22 103.209.216.0/22 -103.209.232.0/22 103.210.0.0/22 +103.210.20.0/22 103.210.96.0/22 103.210.156.0/22 103.210.160.0/22 @@ -3608,11 +4152,9 @@ 103.211.100.0/22 103.211.156.0/22 103.211.164.0/22 -103.211.168.0/22 103.211.192.0/22 103.211.220.0/22 103.211.224.0/22 -103.211.228.0/22 103.211.248.0/22 103.212.0.0/22 103.212.4.0/22 @@ -3662,13 +4204,11 @@ 103.213.184.0/22 103.213.188.0/22 103.213.248.0/22 -103.213.252.0/22 103.214.32.0/22 103.214.48.0/22 103.214.84.0/22 103.214.168.0/22 103.214.212.0/22 -103.214.224.0/22 103.214.240.0/22 103.214.244.0/22 103.215.28.0/22 @@ -3968,7 +4508,6 @@ 103.223.248.0/22 103.223.252.0/22 103.224.0.0/22 -103.224.16.0/22 103.224.40.0/22 103.224.44.0/22 103.224.60.0/22 @@ -3983,7 +4522,6 @@ 103.226.56.0/22 103.226.60.0/22 103.226.80.0/22 -103.226.116.0/22 103.226.132.0/22 103.226.156.0/22 103.226.180.0/22 @@ -4025,7 +4563,6 @@ 103.229.240.0/22 103.230.0.0/22 103.230.28.0/22 -103.230.40.0/22 103.230.44.0/22 103.230.96.0/22 103.230.196.0/22 @@ -4055,7 +4592,6 @@ 103.234.0.0/22 103.234.20.0/22 103.234.56.0/22 -103.234.124.0/22 103.234.128.0/22 103.234.172.0/22 103.234.180.0/22 @@ -4208,7 +4744,6 @@ 103.241.184.0/22 103.241.188.0/22 103.241.220.0/22 -103.242.8.0/22 103.242.64.0/22 103.242.128.0/22 103.242.132.0/22 @@ -4243,7 +4778,6 @@ 103.245.128.0/22 103.246.8.0/22 103.246.12.0/22 -103.246.72.0/22 103.246.120.0/22 103.246.124.0/22 103.246.132.0/22 @@ -4264,7 +4798,6 @@ 103.248.212.0/22 103.248.220.0/22 103.248.224.0/22 -103.248.228.0/22 103.249.8.0/22 103.249.12.0/22 103.249.52.0/22 @@ -4336,7 +4869,6 @@ 103.255.140.0/22 103.255.184.0/22 103.255.200.0/22 -103.255.208.0/22 103.255.212.0/22 103.255.228.0/22 106.0.0.0/24 @@ -4364,6 +4896,7 @@ 106.112.0.0/13 106.120.0.0/13 106.224.0.0/12 +109.244.0.0/16 110.6.0.0/15 110.16.0.0/14 110.34.40.0/22 @@ -4536,7 +5069,8 @@ 114.111.0.0/19 114.111.160.0/19 114.112.0.0/14 -114.116.0.0/15 +114.116.0.0/16 +114.117.0.0/16 114.118.0.0/16 114.119.0.0/17 114.119.128.0/18 @@ -4624,6 +5158,7 @@ 116.78.0.0/15 116.85.0.0/16 116.89.144.0/20 +116.89.240.0/22 116.90.80.0/20 116.90.184.0/21 116.95.0.0/16 @@ -4643,11 +5178,15 @@ 116.198.0.0/16 116.199.0.0/17 116.199.128.0/19 -116.204.0.0/15 +116.204.0.0/17 +116.204.132.0/22 +116.205.0.0/16 +116.206.92.0/22 +116.206.100.0/22 +116.206.176.0/22 116.207.0.0/16 116.208.0.0/14 116.212.160.0/20 -116.213.40.0/22 116.213.44.0/22 116.213.64.0/18 116.213.128.0/17 @@ -4706,7 +5245,12 @@ 117.124.0.0/14 117.128.0.0/10 118.24.0.0/15 -118.26.0.0/16 +118.26.0.0/19 +118.26.32.0/20 +118.26.48.0/21 +118.26.56.0/21 +118.26.64.0/18 +118.26.128.0/17 118.28.0.0/15 118.30.0.0/16 118.31.0.0/16 @@ -4727,6 +5271,7 @@ 118.103.168.0/22 118.103.172.0/22 118.103.176.0/22 +118.107.180.0/22 118.112.0.0/13 118.120.0.0/14 118.124.0.0/15 @@ -4757,7 +5302,7 @@ 118.204.0.0/14 118.212.0.0/16 118.213.0.0/16 -118.215.192.0/19 +118.215.192.0/18 118.224.0.0/14 118.228.0.0/15 118.230.0.0/16 @@ -4934,7 +5479,6 @@ 122.4.0.0/14 122.8.0.0/16 122.9.0.0/16 -122.10.0.0/17 122.10.128.0/22 122.10.132.0/23 122.10.134.0/23 @@ -4947,7 +5491,9 @@ 122.11.0.0/17 122.12.0.0/16 122.13.0.0/16 -122.14.0.0/16 +122.14.0.0/17 +122.14.128.0/18 +122.14.192.0/18 122.48.0.0/16 122.49.0.0/18 122.51.0.0/16 @@ -4987,7 +5533,8 @@ 123.58.0.0/20 123.58.16.0/20 123.58.32.0/19 -123.58.64.0/18 +123.58.64.0/19 +123.58.96.0/19 123.58.128.0/18 123.58.192.0/19 123.58.224.0/20 @@ -5085,7 +5632,6 @@ 124.150.137.0/24 124.151.0.0/16 124.152.0.0/16 -124.156.0.0/16 124.160.0.0/16 124.161.0.0/16 124.162.0.0/16 @@ -5152,6 +5698,12 @@ 125.222.0.0/15 125.254.128.0/18 125.254.192.0/18 +128.108.0.0/16 +129.28.0.0/16 +129.204.0.0/16 +129.211.0.0/16 +132.232.0.0/16 +134.175.0.0/16 137.59.59.0/24 137.59.88.0/22 139.5.56.0/22 @@ -5186,6 +5738,7 @@ 139.226.0.0/15 140.75.0.0/16 140.143.0.0/16 +140.179.0.0/16 140.205.0.0/16 140.206.0.0/15 140.210.0.0/16 @@ -5201,12 +5754,9 @@ 144.7.0.0/16 144.12.0.0/16 144.48.8.0/22 -144.48.12.0/22 -144.48.56.0/22 144.48.64.0/22 144.48.88.0/22 144.48.156.0/22 -144.48.172.0/22 144.48.180.0/22 144.48.184.0/22 144.48.204.0/22 @@ -5217,24 +5767,25 @@ 144.52.0.0/16 144.123.0.0/16 144.255.0.0/16 +146.56.192.0/18 146.196.56.0/22 146.196.68.0/22 146.196.72.0/22 -146.196.76.0/22 146.196.92.0/22 146.196.112.0/22 146.196.116.0/22 146.196.124.0/22 +148.70.0.0/16 150.0.0.0/16 150.115.0.0/16 150.121.0.0/16 150.122.0.0/16 150.129.136.0/22 -150.129.152.0/22 150.129.192.0/22 150.129.216.0/22 150.129.252.0/22 150.138.0.0/15 +150.158.0.0/16 150.223.0.0/16 150.242.0.0/22 150.242.4.0/22 @@ -5269,6 +5820,7 @@ 150.242.248.0/22 150.255.0.0/16 152.104.128.0/17 +152.136.0.0/16 153.0.0.0/16 153.3.0.0/16 153.34.0.0/15 @@ -5276,6 +5828,7 @@ 153.99.0.0/16 153.101.0.0/16 153.118.0.0/15 +154.8.128.0/17 157.0.0.0/16 157.18.0.0/16 157.61.0.0/16 @@ -5304,8 +5857,8 @@ 157.148.0.0/16 157.156.0.0/16 157.255.0.0/16 +159.75.0.0/16 159.226.0.0/16 -160.19.48.0/22 160.19.208.0/22 160.19.212.0/22 160.19.216.0/22 @@ -5326,7 +5879,9 @@ 160.202.248.0/22 160.202.252.0/22 160.238.64.0/22 +161.189.0.0/16 161.207.0.0/16 +162.14.0.0/16 162.105.0.0/16 163.0.0.0/16 163.47.4.0/22 @@ -5386,6 +5941,7 @@ 171.116.0.0/14 171.120.0.0/13 171.208.0.0/12 +172.81.192.0/18 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 @@ -5397,7 +5953,6 @@ 175.64.0.0/11 175.102.0.0/16 175.106.128.0/17 -175.111.108.0/22 175.111.144.0/22 175.111.148.0/22 175.111.152.0/22 @@ -5415,6 +5970,7 @@ 175.176.156.0/22 175.176.176.0/22 175.176.188.0/22 +175.176.192.0/22 175.178.0.0/16 175.184.128.0/18 175.185.0.0/16 @@ -5521,6 +6077,10 @@ 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 +188.131.128.0/17 +192.55.46.0/24 +192.55.68.0/22 +192.102.204.0/23 192.124.154.0/24 192.140.128.0/22 192.140.132.0/22 @@ -5540,6 +6100,9 @@ 192.140.204.0/22 192.140.208.0/22 192.140.212.0/22 +192.144.128.0/17 +193.112.0.0/16 +198.175.100.0/22 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 @@ -5744,7 +6307,6 @@ 202.47.100.0/22 202.47.104.0/22 202.47.108.0/22 -202.47.124.0/24 202.47.126.0/24 202.47.128.0/24 202.47.130.0/23 @@ -5752,7 +6314,6 @@ 202.52.34.0/24 202.52.47.0/24 202.52.143.0/24 -202.52.144.0/24 202.53.140.0/24 202.53.143.0/24 202.57.192.0/22 @@ -5876,6 +6437,7 @@ 202.90.205.0/24 202.90.224.0/20 202.91.0.0/22 +202.91.36.0/22 202.91.96.0/20 202.91.128.0/22 202.91.176.0/20 @@ -5889,10 +6451,6 @@ 202.94.74.0/24 202.94.81.0/24 202.94.92.0/22 -202.95.0.0/22 -202.95.4.0/22 -202.95.8.0/21 -202.95.16.0/20 202.95.240.0/21 202.95.252.0/22 202.96.0.0/18 @@ -6140,6 +6698,7 @@ 202.143.56.0/21 202.143.100.0/22 202.143.104.0/22 +202.144.196.0/22 202.146.160.0/20 202.146.186.0/24 202.146.188.0/22 @@ -6174,7 +6733,6 @@ 202.162.75.0/24 202.164.0.0/20 202.164.96.0/19 -202.165.96.0/20 202.165.176.0/20 202.165.208.0/20 202.165.239.0/24 @@ -7076,6 +7634,7 @@ 203.88.192.0/19 203.89.0.0/22 203.89.8.0/21 +203.89.100.0/22 203.89.133.0/24 203.89.136.0/22 203.89.144.0/24 @@ -7213,7 +7772,6 @@ 203.189.112.0/22 203.189.192.0/19 203.189.232.0/22 -203.189.236.0/22 203.189.240.0/22 203.190.96.0/20 203.190.249.0/24 @@ -7387,6 +7945,8 @@ 211.156.0.0/14 211.160.0.0/14 211.164.0.0/14 +212.64.0.0/17 +212.129.128.0/17 216.250.108.0/22 218.0.0.0/16 218.1.0.0/16 @@ -7664,9 +8224,11 @@ 223.96.0.0/12 223.112.0.0/14 223.116.0.0/15 -223.120.0.0/13 +223.120.128.0/17 +223.121.128.0/17 +223.122.0.0/15 +223.124.0.0/14 223.128.0.0/15 -223.130.8.0/22 223.144.0.0/12 223.160.0.0/14 223.166.0.0/15 diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/gfw.list b/package/lean/luci-app-ssr-plus/root/etc/config/gfw.list new file mode 100644 index 000000000..092e97877 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/etc/config/gfw.list @@ -0,0 +1,36 @@ +91smartyun.pt +adobe.com +amazonaws.com +ampproject.org +apple.news +aws.amazon.com +azureedge.net +backpackers.com.tw +bitfinex.com +buzzfeed.com +clockwise.ee +cloudfront.net +coindesk.com +coinsquare.io +cryptocompare.com +dropboxstatic.com +eurecom.fr +gdax.com +github.com +isnssdk.com +kknews.cc +nutaq.com +openairinterface.org +skype.com +snssdk.com +sublimetext.com +textnow.com +textnow.me +trouter.io +uploaded.net +whatsapp.com +whatsapp.net +wsj.net +google.com +google.com.hk +youtube.com \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr new file mode 100644 index 000000000..b83fa0a6c --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr @@ -0,0 +1,30 @@ + +config global + option tunnel_forward '8.8.4.4:53' + option tunnel_address '0.0.0.0' + option run_mode 'gfw' + option pdnsd_enable '1' + option monitor_enable '0' + option enable_switch '0' + option global_server 'nil' + +config socks5_proxy + option server 'nil' + option local_port '1080' + option local_address '0.0.0.0' + +config access_control + option wan_bp_list '/etc/china_ssr.txt' + option lan_ac_mode 'b' + option router_proxy '1' + +config server_global + option enable_server '0' + +config server_subscribe + option proxy '0' + option auto_update_time '2' + option auto_update '1' + + + diff --git a/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/ad.conf b/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/ad.conf new file mode 100644 index 000000000..e69de29bb diff --git a/package/lean/openwrt-ssr/files/gfw_list.conf b/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_list.conf old mode 100755 new mode 100644 similarity index 100% rename from package/lean/openwrt-ssr/files/gfw_list.conf rename to package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_list.conf diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.init b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr old mode 100644 new mode 100755 similarity index 85% rename from package/lean/openwrt-ssr/files/shadowsocksr.init rename to package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index 2837068a9..46ec8f2b4 --- a/package/lean/openwrt-ssr/files/shadowsocksr.init +++ b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -27,6 +27,7 @@ pdnsd_enable_flag=0 switch_enable=0 switch_server=$1 MAXFD=32768 +CRON_FILE=/etc/crontabs/root uci_get_by_name() { local ret=$(uci get $NAME.$1.$2 2>/dev/null) @@ -38,6 +39,24 @@ uci_get_by_type() { echo ${ret:=$3} } +add_cron() +{ + sed -i '/ssrplus.log/d' $CRON_FILE + echo '0 */1 * * * /usr/share/shadowsocksr/ssr-watchdog >> /tmp/ssrplus.log 2>&1' >> $CRON_FILE + echo '0 1 * * 0 echo "" > /tmp/ssrplus.log' >> $CRON_FILE + [ -n "$(grep -w "/usr/share/shadowsocksr/subscribe.sh" $CRON_FILE)" ] && sed -i '/\/usr\/share\/shadowsocksr\/subscribe.sh/d' $CRON_FILE + [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/subscribe.sh" >> $CRON_FILE + [ -z "$(grep -w "/usr/share/shadowsocksr/update.sh" $CRON_FILE)" ] && echo "0 5 * * 0 /usr/share/shadowsocksr/update.sh" >> $CRON_FILE + crontab $CRON_FILE +} + +del_cron() +{ + sed -i '/shadowsocksr/d' $CRON_FILE + sed -i '/ssrplus.log/d' $CRON_FILE + /etc/init.d/cron restart +} + run_mode=$(uci_get_by_type global run_mode) gen_config_file() { @@ -119,7 +138,7 @@ start_rules() { local local_port=$(uci_get_by_name $GLOBAL_SERVER local_port) local lan_ac_ips=$(uci_get_by_type access_control lan_ac_ips) - local lan_ac_mode=$(uci_get_by_type access_control lan_ac_mode) + local lan_ac_mode="b" local router_proxy=$(uci_get_by_type access_control router_proxy) if [ "$GLOBAL_SERVER" = "$UDP_RELAY_SERVER" -a $kcp_flag = 0 ]; then ARG_UDP="-u" @@ -151,6 +170,7 @@ start_rules() { -i "$(uci_get_by_type access_control wan_bp_list)" \ -b "$(uci_get_by_type access_control wan_bp_ips)" \ -w "$(uci_get_by_type access_control wan_fw_ips)" \ + -p "$(uci_get_by_type access_control lan_fp_ips)" \ $(get_arg_out) $gfwmode $ARG_UDP return $? @@ -172,7 +192,7 @@ start_pdnsd() { cat > /var/etc/pdnsd.conf < /var/etc/udp2raw.conf </dev/null 2>&1 & -} - -start_udpspeeeder() { - /usr/bin/udpspeeder -c -l0.0.0.0:$(uci_get_by_type udpspeeder local_port) \ - -r$(uci_get_by_type udpspeeder server):$(uci_get_by_type udpspeeder server_port) \ - -k $(uci_get_by_type udpspeeder key) \ - --mode $(uci_get_by_type udpspeeder speeder_mode) \ - --mtu $(uci_get_by_type udpspeeder mtu) \ - -f$(uci_get_by_type udpspeeder fec) \ - -q$(uci_get_by_type udpspeeder queue_len) \ - --timeout $(uci_get_by_type udpspeeder timeout) \ - >/dev/null 2>&1 & -} - gen_service_file() { if [ $(uci_get_by_name $1 fast_open) = "1" ] ;then fastopen="true"; @@ -428,18 +420,7 @@ rules() { fi } -start() { - case "$(uci_get_by_type udp2raw udp2raw_enable)" in - 1|on|true|yes|enabled) - start_udp2raw - ;; - esac - case "$(uci_get_by_type udpspeeder udpspeeder_enable)" in - 1|on|true|yes|enabled) - start_udpspeeeder - ;; - esac - +start() { if [ -z "$switch_server" ] ;then GLOBAL_SERVER=$(uci_get_by_type global global_server) else @@ -455,21 +436,20 @@ start() { start_tunnel ;; esac + else + mkdir -p /tmp/dnsmasq.d + cat > /tmp/dnsmasq.d/dnsmasq-ssr.conf </dev/null fi - - killall -q -9 ssr-monitor - - killall -q -9 udp2raw - killall -q -9 udpspeeder - /usr/bin/udp2raw --clear >/dev/null - if [ -z "$switch_server" ] ;then killall -q -9 ssr-switch fi @@ -499,5 +472,11 @@ stop() { killall -q -9 ssr-server killall -q -9 ssr-kcptun killall -q -9 ssr-local - killall -q pdnsd + kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1 || killall -9 pdnsd >/dev/null 2>&1 + + if [ -f "/tmp/dnsmasq.d/dnsmasq-ssr.conf" ]; then + rm -f /tmp/dnsmasq.d/dnsmasq-ssr.conf + /etc/init.d/dnsmasq restart + fi + del_cron } diff --git a/package/lean/openwrt-ssr/files/root/etc/uci-defaults/luci-shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus old mode 100644 new mode 100755 similarity index 92% rename from package/lean/openwrt-ssr/files/root/etc/uci-defaults/luci-shadowsocksr rename to package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus index c2a0fdf30..97aa54a46 --- a/package/lean/openwrt-ssr/files/root/etc/uci-defaults/luci-shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus @@ -13,5 +13,6 @@ uci -q batch <<-EOF >/dev/null commit firewall EOF +/usr/share/shadowsocksr/gfw2ipset.sh rm -f /tmp/luci-indexcache exit 0 diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.ad b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad old mode 100644 new mode 100755 similarity index 100% rename from package/lean/openwrt-ssr/files/shadowsocksr.ad rename to package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.gfw b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw old mode 100644 new mode 100755 similarity index 86% rename from package/lean/openwrt-ssr/files/shadowsocksr.gfw rename to package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw index c9e552450..64822d566 --- a/package/lean/openwrt-ssr/files/shadowsocksr.gfw +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw @@ -26,8 +26,6 @@ BEGIN { prev = "________"; } { generate_china_banned /tmp/gfw.b64 > /tmp/gfw.txt rm -f /tmp/gfwlist.txt -datestr=`date` -echo -e "# gfw list ipset rules for dnsmasq\n# updated on $datestr\n#">/tmp/gfwnew.txt -sed '/.*/s/.*/server=\/\.&\/127.0.0.1#5353\nipset=\/\.&\/gfwlist/' /tmp/gfw.txt >>/tmp/gfwnew.txt +sed '/.*/s/.*/server=\/\.&\/127.0.0.1#5353\nipset=\/\.&\/gfwlist/' /tmp/gfw.txt >/tmp/gfwnew.txt rm -f /tmp/gfw.txt diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.monitor b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor old mode 100644 new mode 100755 similarity index 100% rename from package/lean/openwrt-ssr/files/shadowsocksr.monitor rename to package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.rule b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules old mode 100644 new mode 100755 similarity index 91% rename from package/lean/openwrt-ssr/files/shadowsocksr.rule rename to package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules index 0bf1ba571..2c75b8ec9 --- a/package/lean/openwrt-ssr/files/shadowsocksr.rule +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules @@ -26,6 +26,7 @@ usage() { define access control mode -b wan ip of will be bypassed -w wan ip of will be forwarded + -p lan ip of will be global proxy -e extra options for iptables -o apply the rules to the OUTPUT chain -O apply the global rules to the OUTPUT chain @@ -60,6 +61,7 @@ flush_r() { ipset -X ss_spec_lan_ac 2>/dev/null ipset -X ss_spec_wan_ac 2>/dev/null ipset -X ssr_gen_router 2>/dev/null + ipset -X fplan 2>/dev/null [ -n "$FWI" ] && echo '#!/bin/sh' >$FWI return 0 } @@ -79,12 +81,22 @@ EOF for ip in $WAN_FW_IP; do ipset add gfwlist $ip ; done $IPT -N SS_SPEC_WAN_AC $IPT -A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW + + ipset -N fplan iphash 2>/dev/null + for ip in $LAN_FP_IP; do ipset add fplan $ip ; done + $IPT -I SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW fi return $? } fw_rule() { - $IPT -N SS_SPEC_WAN_FW && \ + $IPT -N SS_SPEC_WAN_FW + $IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN + $IPT -A SS_SPEC_WAN_FW -d 127.0.0.0/8 -j RETURN + $IPT -A SS_SPEC_WAN_FW -d 172.16.0.0/12 -j RETURN + $IPT -A SS_SPEC_WAN_FW -d 192.168.0.0/16 -j RETURN + $IPT -A SS_SPEC_WAN_FW -d 224.0.0.0/4 -j RETURN + $IPT -A SS_SPEC_WAN_FW -d 240.0.0.0/4 -j RETURN $IPT -A SS_SPEC_WAN_FW -p tcp \ -j REDIRECT --to-ports $local_port 2>/dev/null || { loger 3 "Can't redirect, please check the iptables." @@ -220,7 +232,7 @@ EOF return 0 } -while getopts ":s:l:S:L:i:e:a:b:w:oOuUfgh" arg; do +while getopts ":s:l:S:L:i:e:a:b:w:p:oOuUfgh" arg; do case "$arg" in s) server=$OPTARG @@ -249,6 +261,9 @@ while getopts ":s:l:S:L:i:e:a:b:w:oOuUfgh" arg; do w) WAN_FW_IP=$OPTARG ;; + p) + LAN_FP_IP=$OPTARG + ;; o) OUTPUT=1 ;; diff --git a/package/lean/openwrt-ssr/files/shadowsocksr.switch b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch old mode 100644 new mode 100755 similarity index 100% rename from package/lean/openwrt-ssr/files/shadowsocksr.switch rename to package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh new file mode 100755 index 000000000..d620beb4d --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"gfwlist"'\n",$0)}' /etc/config/gfw.list > /etc/dnsmasq.ssr/custom_forward.conf +awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5353"'\n",$0)}' /etc/config/gfw.list >> /etc/dnsmasq.ssr/custom_forward.conf + diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssr-watchdog b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssr-watchdog new file mode 100755 index 000000000..269114898 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssr-watchdog @@ -0,0 +1,17 @@ +#!/bin/sh + +LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") + +/usr/bin/ssr-check www.google.com 80 3 1 + +if [ "$?" == "0" ]; then + echo '['$LOGTIME'] ShadowsocksR No Problem.' +else + /usr/bin/ssr-check www.baidu.com 80 3 1 + if [ "$?" == "0" ]; then + echo '['$LOGTIME'] Problem decteted, restarting ShadowsocksR...' + /etc/init.d/shadowsocksr restart + else + echo '['$LOGTIME'] Network Problem. Do nothing.' + fi +fi diff --git a/package/lean/openwrt-ssr/files/root/usr/share/shadowsocksr/subscribe.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh similarity index 91% rename from package/lean/openwrt-ssr/files/root/usr/share/shadowsocksr/subscribe.sh rename to package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh index a9a5c7a3f..a388f7145 100755 --- a/package/lean/openwrt-ssr/files/root/usr/share/shadowsocksr/subscribe.sh +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.sh @@ -24,7 +24,7 @@ Server_Update() { local uci_set="uci -q set $name.$1." ${uci_set}alias="[$ssr_group] $ssr_remarks" ${uci_set}auth_enable="0" - ${uci_set}switch_enable="0" + ${uci_set}switch_enable="1" ${uci_set}server="$ssr_host" ${uci_set}server_port="$ssr_port" ${uci_set}local_port="1234" @@ -48,7 +48,7 @@ subscribe_url=($(uci get $name.@server_subscribe[0].subscribe_url)) log_name=${name}_subscribe for ((o=0;o<${#subscribe_url[@]};o++)) do - subscribe_data=$(curl -s -L --connect-timeout 3 ${subscribe_url[o]}) + subscribe_data=$(wget-ssl --no-check-certificate -T 3 -O- ${subscribe_url[o]}) curl_code=$? if [ $curl_code -eq 0 ];then ssr_url=($(echo $subscribe_data | base64 -d | sed 's/\r//g')) # 解码数据并删除 \r 换行符 @@ -117,19 +117,7 @@ do ;; esac done - CheckIPAddr $ssr_host - if [ $? -ne 0 ]; then # 如果地址不是IP 则解析IP - ssr_hosts=($(dig $ssr_host a +short)) - for ((i=0;i<${#ssr_hosts[@]};i++)) - do - ssr_host=${ssr_hosts[i]} - CheckIPAddr $ssr_host - [ $? -eq 0 ] && continue - ssr_host="" - done - [ -z "$ssr_host" ] && continue - fi - + uci_name_tmp=$(uci show $name | grep -w $ssr_host | awk -F . '{print $2}') if [ -z "$uci_name_tmp" ]; then # 判断当前服务器信息是否存在 uci_name_tmp=$(uci add $name servers) diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.sh new file mode 100755 index 000000000..01ab7f90f --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +chnroute_data=$(wget -O- -t 3 -T 3 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest) +[ $? -eq 0 ] && { + echo "$chnroute_data" | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /tmp/china_ssr.txt +} + +if [ -s "/tmp/china_ssr.txt" ];then + if ( ! cmp -s /tmp/china_ssr.txt /etc/china_ssr.txt );then + mv /tmp/china_ssr.txt /etc/china_ssr.txt + fi +fi + +wget-ssl --no-check-certificate https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt -O /tmp/gfw.b64 +/usr/bin/ssr-gfw + +if [ -s "/tmp/gfwnew.txt" ];then + if ( ! cmp -s /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf );then + mv /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf + echo "copy" + fi +fi + +/etc/init.d/shadowsocksr restart \ No newline at end of file diff --git a/package/lean/luci-app-zerotier/Makefile b/package/lean/luci-app-zerotier/Makefile index 722f95df9..2a5d12d92 100644 --- a/package/lean/luci-app-zerotier/Makefile +++ b/package/lean/luci-app-zerotier/Makefile @@ -10,7 +10,7 @@ LUCI_TITLE:=LuCI for Zerotier LUCI_DEPENDS:=+zerotier LUCI_PKGARCH:=all PKG_VERSION:=1.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/package/lean/luci-app-zerotier/luasrc/controller/zerotier.lua b/package/lean/luci-app-zerotier/luasrc/controller/zerotier.lua index 23474b977..3320f8408 100644 --- a/package/lean/luci-app-zerotier/luasrc/controller/zerotier.lua +++ b/package/lean/luci-app-zerotier/luasrc/controller/zerotier.lua @@ -5,7 +5,7 @@ function index() return end -entry({"admin","services","zerotier"},cbi("zerotier"),_("ZeroTier"),10).dependent=true +entry({"admin","services","zerotier"},cbi("zerotier"),_("ZeroTier"),90).dependent=true entry({"admin","services","zerotier","status"},call("act_status")).leaf=true end diff --git a/package/lean/openwrt-ssr/Makefile b/package/lean/openwrt-ssr/Makefile deleted file mode 100644 index 09b8fda71..000000000 --- a/package/lean/openwrt-ssr/Makefile +++ /dev/null @@ -1,238 +0,0 @@ -# -# Copyright (C) 2017 OpenWrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=openwrt-ssr -PKG_VERSION:=3.1.1 -# PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/shadowsocksrr/shadowsocksr-libev -PKG_SOURCE_VERSION:=d4904568c0bd7e0861c0cbfeaa43740f404db214 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) - -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Akkariiin - -#PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) - -PKG_INSTALL:=1 -PKG_FIXUP:=autoreconf -PKG_USE_MIPS16:=0 -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/openwrt-ssr/Default - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=shadowsocksR-libev LuCI interface - URL:=https://github.com/MrTheUniverse/openwrt-ssr - VARIANT:=$(1) - DEPENDS:=$(3) - PKGARCH:=all -endef - - -Package/luci-app-shadowsocksR = $(call Package/openwrt-ssr/Default,openssl,(OpenSSL),+libopenssl +libpthread +ipset +ip-full +iptables-mod-tproxy +libpcre +zlib) -Package/luci-app-shadowsocksR-Client = $(call Package/openwrt-ssr/Default,openssl,(OpenSSL),+libopenssl +libpthread +ipset +ip-full +iptables-mod-tproxy +libpcre +zlib) -Package/luci-app-shadowsocksR-Server = $(call Package/openwrt-ssr/Default,openssl,(OpenSSL),+libopenssl +libpthread +ipset +ip-full +iptables-mod-tproxy +libpcre +zlib) -Package/luci-app-shadowsocksR-GFW = $(call Package/openwrt-ssr/Default,openssl,(OpenSSL),+libopenssl +libpthread +ipset +ip-full +iptables-mod-tproxy +libpcre +zlib +dnsmasq-full +coreutils +coreutils-base64 +curl +bash +bind-dig +pdnsd-alt) - -define Package/openwrt-ssr/description - LuCI Support for $(1). -endef - -Package/luci-app-shadowsocksR/description = $(call Package/openwrt-ssr/description,shadowsocksr-libev Client and Server) -Package/luci-app-shadowsocksR-Client/description = $(call Package/openwrt-ssr/description,shadowsocksr-libev Client) -Package/luci-app-shadowsocksR-Server/description = $(call Package/openwrt-ssr/description,shadowsocksr-libev Server) -Package/luci-app-shadowsocksR-GFW/description = $(call Package/openwrt-ssr/description,shadowsocksr-libev GFW) - -define Package/openwrt-ssr/prerm -#!/bin/sh -# check if we are on real system -if [ -z "$${IPKG_INSTROOT}" ]; then - echo "Removing rc.d symlink for shadowsocksr" - /etc/init.d/shadowsocksr disable - /etc/init.d/shadowsocksr stop - echo "Removing firewall rule for shadowsocksr" - uci -q batch <<-EOF >/dev/null - delete firewall.shadowsocksr - commit firewall -EOF -if [ "$(1)" = "GFW" ] ;then -sed -i '/conf-dir/d' /etc/dnsmasq.conf -/etc/init.d/dnsmasq restart -fi -fi -exit 0 -endef - -Package/luci-app-shadowsocksR/prerm = $(call Package/openwrt-ssr/prerm,shadowsocksr) -Package/luci-app-shadowsocksR-Client/prerm = $(call Package/openwrt-ssr/prerm,shadowsocksr) -Package/luci-app-shadowsocksR-GFW/prerm = $(call Package/openwrt-ssr/prerm,GFW) - -define Package/luci-app-shadowsocksR-Server/prerm -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - /etc/init.d/shadowsocksr disable - /etc/init.d/shadowsocksr stop -fi -exit 0 - -endef - - -define Package/openwrt-ssr/postinst -#!/bin/sh - -if [ -z "$${IPKG_INSTROOT}" ]; then - uci -q batch <<-EOF >/dev/null - delete firewall.shadowsocksr - set firewall.shadowsocksr=include - set firewall.shadowsocksr.type=script - set firewall.shadowsocksr.path=/var/etc/shadowsocksr.include - set firewall.shadowsocksr.reload=1 - commit firewall -EOF -fi - -if [ -z "$${IPKG_INSTROOT}" ]; then - ( . /etc/uci-defaults/luci-shadowsocksr ) && rm -f /etc/uci-defaults/luci-shadowsocksr - chmod 755 /etc/init.d/shadowsocksr >/dev/null 2>&1 - /etc/init.d/shadowsocksr enable >/dev/null 2>&1 - if [ "$(1)" = "GFW" ] ;then - if [ -f "/etc/dnsmasq.conf" ]; then - str=`cat /etc/dnsmasq.conf|grep conf-dir` - if [ -z "$str" ]; then - echo "conf-dir=/etc/dnsmasq.ssr" >> /etc/dnsmasq.conf - else - sed -i '/conf-dir/d' /etc/dnsmasq.conf - echo "conf-dir=/etc/dnsmasq.ssr" >> /etc/dnsmasq.conf - fi - else - echo "conf-dir=/etc/dnsmasq.ssr" > /etc/dnsmasq.conf - fi - /etc/init.d/dnsmasq restart - fi -fi -exit 0 -endef - - -Package/luci-app-shadowsocksR/postinst = $(call Package/openwrt-ssr/postinst,shadowsocksr) -Package/luci-app-shadowsocksR-Client/postinst = $(call Package/openwrt-ssr/postinst,shadowsocksr) -Package/luci-app-shadowsocksR-GFW/postinst = $(call Package/openwrt-ssr/postinst,GFW) - -define Package/luci-app-shadowsocksR-Server/postinst -#!/bin/sh - -if [ -z "$${IPKG_INSTROOT}" ]; then - ( . /etc/uci-defaults/luci-shadowsocksr ) && rm -f /etc/uci-defaults/luci-shadowsocksr - chmod 755 /etc/init.d/shadowsocksr >/dev/null 2>&1 - /etc/init.d/shadowsocksr enable >/dev/null 2>&1 -fi -exit 0 -endef - - - -CONFIGURE_ARGS += --disable-documentation --disable-ssp - -define Install/common - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller - $(INSTALL_DATA) ./files/luci/controller/shadowsocksr.lua $(1)/usr/lib/lua/luci/controller/shadowsocksr.lua - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) ./files/luci/i18n/shadowsocksr.*.lmo $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/shadowsocksr - $(INSTALL_DATA) ./files/luci/model/cbi/shadowsocksr/*.lua $(1)/usr/lib/lua/luci/model/cbi/shadowsocksr/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/shadowsocksr - $(INSTALL_DATA) ./files/luci/view/shadowsocksr/*.htm $(1)/usr/lib/lua/luci/view/shadowsocksr/ - $(INSTALL_DIR) $(1)/etc/uci-defaults - $(INSTALL_BIN) ./files/root/etc/uci-defaults/luci-shadowsocksr $(1)/etc/uci-defaults/luci-shadowsocksr - - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DATA) ./files/shadowsocksr.config $(1)/etc/config/shadowsocksr - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/shadowsocksr.init $(1)/etc/init.d/shadowsocksr -endef - -define Package/openwrt-ssr/install - $(call Install/common,$(1)) - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local - $(LN) /usr/bin/ssr-local $(1)/usr/bin/ssr-tunnel - #$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-server $(1)/usr/bin/ssr-server - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-check $(1)/usr/bin/ssr-check - $(INSTALL_BIN) ./files/shadowsocksr.rule $(1)/usr/bin/ssr-rules - $(INSTALL_BIN) ./files/shadowsocksr.monitor $(1)/usr/bin/ssr-monitor - $(INSTALL_BIN) ./files/shadowsocksr.switch $(1)/usr/bin/ssr-switch - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/china_ssr.txt $(1)/etc/china_ssr.txt - $(INSTALL_DIR) $(1)/usr/share/shadowsocksr - $(INSTALL_BIN) ./files/root/usr/share/shadowsocksr/*.sh $(1)/usr/share/shadowsocksr/ -endef - -Package/luci-app-shadowsocksR/install = $(call Package/openwrt-ssr/install,$(1),shadowsocksr) - -define Package/luci-app-shadowsocksR-Client/install - $(call Install/common,$(1)) - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir - #$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-tunnel $(1)/usr/bin/ssr-tunnel - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-check $(1)/usr/bin/ssr-check - $(INSTALL_BIN) ./files/shadowsocksr.rule $(1)/usr/bin/ssr-rules - $(INSTALL_BIN) ./files/shadowsocksr.monitor $(1)/usr/bin/ssr-monitor - $(INSTALL_BIN) ./files/shadowsocksr.switch $(1)/usr/bin/ssr-switch - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/china_ssr.txt $(1)/etc/china_ssr.txt -endef - -define Package/luci-app-shadowsocksR-Server/install - $(call Install/common,$(1)) - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-server $(1)/usr/bin/ssr-server - $(INSTALL_BIN) ./files/shadowsocksr.rule $(1)/usr/bin/ssr-rules - $(INSTALL_BIN) ./files/shadowsocksr.monitor $(1)/usr/bin/ssr-monitor -endef - -define Package/luci-app-shadowsocksR-GFW/install - $(call Install/common,$(1)) - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local - $(LN) /usr/bin/ssr-local $(1)/usr/bin/ssr-tunnel - #$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-server $(1)/usr/bin/ssr-server - $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-check $(1)/usr/bin/ssr-check - $(INSTALL_BIN) ./files/shadowsocksr.rule $(1)/usr/bin/ssr-rules - $(INSTALL_BIN) ./files/shadowsocksr.monitor $(1)/usr/bin/ssr-monitor - $(INSTALL_BIN) ./files/shadowsocksr.gfw $(1)/usr/bin/ssr-gfw - $(INSTALL_BIN) ./files/shadowsocksr.ad $(1)/usr/bin/ssr-ad - $(INSTALL_BIN) ./files/shadowsocksr.switch $(1)/usr/bin/ssr-switch - $(INSTALL_DIR) $(1)/etc/dnsmasq.ssr - $(INSTALL_DATA) ./files/gfw_list.conf $(1)/etc/dnsmasq.ssr/gfw_list.conf - $(INSTALL_DATA) ./files/custom_forward.conf $(1)/etc/dnsmasq.ssr/custom_forward.conf - $(INSTALL_DATA) ./files/ad.conf $(1)/etc/dnsmasq.ssr/ad.conf - $(INSTALL_DIR) $(1)/etc - $(INSTALL_DATA) ./files/china_ssr.txt $(1)/etc/china_ssr.txt - $(INSTALL_DIR) $(1)/usr/share/shadowsocksr - $(INSTALL_DATA) ./files/root/usr/share/shadowsocksr/*.sh $(1)/usr/share/shadowsocksr/ -endef - -#$(eval $(call BuildPackage,luci-app-shadowsocksR)) -#$(eval $(call BuildPackage,luci-app-shadowsocksR-Client)) -#$(eval $(call BuildPackage,luci-app-shadowsocksR-Server)) -$(eval $(call BuildPackage,luci-app-shadowsocksR-GFW)) diff --git a/package/lean/openwrt-ssr/files/ad.conf b/package/lean/openwrt-ssr/files/ad.conf deleted file mode 100755 index a574dc88f..000000000 --- a/package/lean/openwrt-ssr/files/ad.conf +++ /dev/null @@ -1,3365 +0,0 @@ -address=/280dp.com/127.0.0.1 -address=/00880808.com/127.0.0.1 -address=/0133hao.net/127.0.0.1 -address=/02123s.com/127.0.0.1 -address=/022aifang.com/127.0.0.1 -address=/023hysj.com/127.0.0.1 -address=/025suyu.com/127.0.0.1 -address=/0313413.com/127.0.0.1 -address=/0451106.com/127.0.0.1 -address=/04zl.cn/127.0.0.1 -address=/0516bm.com/127.0.0.1 -address=/0531kt.com/127.0.0.1 -address=/0571hy.com/127.0.0.1 -address=/0571yy.com/127.0.0.1 -address=/0592weixin.com/127.0.0.1 -address=/0756sjlm.com.cn/127.0.0.1 -address=/080644.com/127.0.0.1 -address=/0937jyg.com/127.0.0.1 -address=/0xxd.com/127.0.0.1 -address=/1000dy.com/127.0.0.1 -address=/100ea.com/127.0.0.1 -address=/100fenlm.com/127.0.0.1 -address=/103.249.254.113/127.0.0.1 -address=/104.195.62.12/127.0.0.1 -address=/104.197.140.120/127.0.0.1 -address=/104.198.198.188/127.0.0.1 -address=/106.187.95.251/127.0.0.1 -address=/111.73.45.147/127.0.0.1 -address=/111111qb.com/127.0.0.1 -address=/112.74.95.46/127.0.0.1 -address=/11370090.net/127.0.0.1 -address=/114.95.102.77/127.0.0.1 -address=/115.238.246.181/127.0.0.1 -address=/116.55.227.242/127.0.0.1 -address=/117.25.133.209/127.0.0.1 -address=/118.144.88.216/127.0.0.1 -address=/119.29.207.87/127.0.0.1 -address=/119.4.249.166/127.0.0.1 -address=/121.40.25.88/127.0.0.1 -address=/122.227.254.195/127.0.0.1 -address=/12306media.com/127.0.0.1 -address=/12365chia.com/127.0.0.1 -address=/123hala.com/127.0.0.1 -address=/124.232.160.178/127.0.0.1 -address=/138138138.top/127.0.0.1 -address=/138lm.com/127.0.0.1 -address=/139.159.32.82/127.0.0.1 -address=/139.196.166.21/127.0.0.1 -address=/1515788.net/127.0.0.1 -address=/1680go.com/127.0.0.1 -address=/16k6.com/127.0.0.1 -address=/170yy.com/127.0.0.1 -address=/175bar.com/127.0.0.1 -address=/176um.com/127.0.0.1 -address=/17un.co/127.0.0.1 -address=/180.76.171.28/127.0.0.1 -address=/181lm.net/127.0.0.1 -address=/182.92.81.104/127.0.0.1 -address=/18tzx.com/127.0.0.1 -address=/1999sg.com/127.0.0.1 -address=/1d1px.net/127.0.0.1 -address=/1i580.com/127.0.0.1 -address=/1kmb.cn/127.0.0.1 -address=/1kzh.com/127.0.0.1 -address=/1l1.cc/127.0.0.1 -address=/1lib.cn/127.0.0.1 -address=/1uandun.com/127.0.0.1 -address=/201071.com/127.0.0.1 -address=/2012ui.com/127.0.0.1 -address=/211.103.159.32/127.0.0.1 -address=/211.149.225.23/127.0.0.1 -address=/211.167.105.131/127.0.0.1 -address=/218.25.246.118/127.0.0.1 -address=/219.234.83.60/127.0.0.1 -address=/220.115.251.25/127.0.0.1 -address=/221.204.213.222/127.0.0.1 -address=/22lm.cc/127.0.0.1 -address=/258pcf.com/127.0.0.1 -address=/268mob.cn/127.0.0.1 -address=/272xb.com/127.0.0.1 -address=/28487.net/127.0.0.1 -address=/28acglz.com/127.0.0.1 -address=/2m2n.com/127.0.0.1 -address=/338336.com/127.0.0.1 -address=/33shangyou.com/127.0.0.1 -address=/360baidus.com/127.0.0.1 -address=/361315.cc/127.0.0.1 -address=/365bibi.com/127.0.0.1 -address=/365safego.com/127.0.0.1 -address=/366safego.com/127.0.0.1 -address=/36pn.com/127.0.0.1 -address=/376zf.com/127.0.0.1 -address=/39xc.net/127.0.0.1 -address=/3g.990.net/127.0.0.1 -address=/3gmtr.com/127.0.0.1 -address=/3htai.com/127.0.0.1 -address=/3qmh.com/127.0.0.1 -address=/3xx.vip/127.0.0.1 -address=/3ygww.com/127.0.0.1 -address=/45.34.240.72/127.0.0.1 -address=/456juhd.com/127.0.0.1 -address=/47.90.50.177/127.0.0.1 -address=/4ggww.com/127.0.0.1 -address=/50zera.com/127.0.0.1 -address=/5125129.com/127.0.0.1 -address=/5151gj.com/127.0.0.1 -address=/517m.cn/127.0.0.1 -address=/51jumintong.com/127.0.0.1 -address=/51weidashi.com/127.0.0.1 -address=/51xumei.com/127.0.0.1 -address=/5207470.com/127.0.0.1 -address=/5269120.com/127.0.0.1 -address=/52kmk.com/127.0.0.1 -address=/52yugan.com/127.0.0.1 -address=/5535aibo.com/127.0.0.1 -address=/57union.com/127.0.0.1 -address=/58.215.179.159/127.0.0.1 -address=/592man.com/127.0.0.1 -address=/5imoney.com/127.0.0.1 -address=/5jcom.com.cn/127.0.0.1 -address=/5pub.com/127.0.0.1 -address=/5x5q.com/127.0.0.1 -address=/60.190.139.164/127.0.0.1 -address=/61.152.223.15/127.0.0.1 -address=/61.174.50.211/127.0.0.1 -address=/626uc.com/127.0.0.1 -address=/6612151.cn/127.0.0.1 -address=/6612152.cn/127.0.0.1 -address=/66san.com/127.0.0.1 -address=/6728812.com/127.0.0.1 -address=/68665565.com/127.0.0.1 -address=/69duk.com/127.0.0.1 -address=/6dvip.com/127.0.0.1 -address=/6huu.com/127.0.0.1 -address=/700ok.net/127.0.0.1 -address=/70lm.com/127.0.0.1 -address=/711kk.com/127.0.0.1 -address=/71sem.com/127.0.0.1 -address=/766ba.net/127.0.0.1 -address=/77power.com/127.0.0.1 -address=/7891655.cn/127.0.0.1 -address=/7895983.cn/127.0.0.1 -address=/7dah8.com/127.0.0.1 -address=/7jiajiao.com/127.0.0.1 -address=/7shang9xia.com/127.0.0.1 -address=/7wen.cn/127.0.0.1 -address=/7xi9g1.com1.z0.glb.clouddn.com/127.0.0.1 -address=/7xz3.com/127.0.0.1 -address=/80sjw.com/127.0.0.1 -address=/813690.top/127.0.0.1 -address=/81c.cn/127.0.0.1 -address=/8368661.com/127.0.0.1 -address=/8521448.com/127.0.0.1 -address=/85tgw.com/127.0.0.1 -address=/860010.com/127.0.0.1 -address=/8800271.com.cn/127.0.0.1 -address=/88818122.cn/127.0.0.1 -address=/8881919.cc/127.0.0.1 -address=/88rpg.net/127.0.0.1 -address=/892155.com/127.0.0.1 -address=/89h8.com/127.0.0.1 -address=/8ao8ao.com/127.0.0.1 -address=/8mfty.com/127.0.0.1 -address=/91xry.com/127.0.0.1 -address=/91ysa.com/127.0.0.1 -address=/91zgm.com/127.0.0.1 -address=/9377aa.com/127.0.0.1 -address=/9377bh.com/127.0.0.1 -address=/9377co.com/127.0.0.1 -address=/9377hi.com/127.0.0.1 -address=/9377if.com/127.0.0.1 -address=/9377ku.com/127.0.0.1 -address=/9377or.com/127.0.0.1 -address=/9377os.com/127.0.0.1 -address=/93manhua.com/127.0.0.1 -address=/94lm.com/127.0.0.1 -address=/95105012.com/127.0.0.1 -address=/95558000.com/127.0.0.1 -address=/96mob.com/127.0.0.1 -address=/99909988.com/127.0.0.1 -address=/99lolo.com/127.0.0.1 -address=/9dtiny.cn/127.0.0.1 -address=/9kff.com/127.0.0.1 -address=/a.youdao.com/127.0.0.1 -address=/a0b11.com/127.0.0.1 -address=/a0b22.com/127.0.0.1 -address=/a0b33.com/127.0.0.1 -address=/a0c66.com/127.0.0.1 -address=/a0c77.com/127.0.0.1 -address=/a3p4.net/127.0.0.1 -address=/a907907.com/127.0.0.1 -address=/a9377j.com/127.0.0.1 -address=/abctcqq.top/127.0.0.1 -address=/acasys88.cn/127.0.0.1 -address=/acwgf.com/127.0.0.1 -address=/ad000000.com/127.0.0.1 -address=/ad9377.com/127.0.0.1 -address=/adbot.tw/127.0.0.1 -address=/adm-cnzz.net/127.0.0.1 -address=/adomv.com/127.0.0.1 -address=/adreal.cn/127.0.0.1 -address=/adrs.sdo.com/127.0.0.1 -address=/ads.uc.cn/127.0.0.1 -address=/adsbang.top/127.0.0.1 -address=/adsinstant.com/127.0.0.1 -address=/adytx.com/127.0.0.1 -address=/afjlb.com/127.0.0.1 -address=/ahhuazhen.com/127.0.0.1 -address=/ahszgog.com/127.0.0.1 -address=/ahyau.com/127.0.0.1 -address=/ahyuns.com/127.0.0.1 -address=/aijielang.cn/127.0.0.1 -address=/aishang.bid/127.0.0.1 -address=/aishiguolong.com/127.0.0.1 -address=/ajaxcdn.org/127.0.0.1 -address=/ajuhd.com/127.0.0.1 -address=/akrwi.cn/127.0.0.1 -address=/alicmayuns.com/127.0.0.1 -address=/alimama.alicdn.com/127.0.0.1 -address=/aliqqjd.cn/127.0.0.1 -address=/alisinak.com/127.0.0.1 -address=/alitianxia168.com/127.0.0.1 -address=/aliyuncss.com/127.0.0.1 -address=/aliyunxin.com/127.0.0.1 -address=/allxin.com/127.0.0.1 -address=/amazingmagics.com/127.0.0.1 -address=/anioscp.com/127.0.0.1 -address=/anreson.net/127.0.0.1 -address=/anzhuocpm.com/127.0.0.1 -address=/apkdo.com/127.0.0.1 -address=/aqgyju.cn/127.0.0.1 -address=/aralego.com/127.0.0.1 -address=/arealx.com/127.0.0.1 -address=/assigned.cn/127.0.0.1 -address=/aswlx.cn/127.0.0.1 -address=/at98.com/127.0.0.1 -address=/atanx.alicdn.com/127.0.0.1 -address=/awkjs.com/127.0.0.1 -address=/axhxa.com/127.0.0.1 -address=/axiba66.com/127.0.0.1 -address=/b7nkd.cn/127.0.0.1 -address=/b9377h.com/127.0.0.1 -address=/b99u.top/127.0.0.1 -address=/baiapk.com/127.0.0.1 -address=/baiduace.com/127.0.0.1 -address=/baidujavascript.com/127.0.0.1 -address=/baidulao.com/127.0.0.1 -address=/baisuijk.com/127.0.0.1 -address=/bangbang521.com/127.0.0.1 -address=/bccyyc.com/127.0.0.1 -address=/bdpuaw.com/127.0.0.1 -address=/bdtongfei.cn/127.0.0.1 -address=/bebelait.com/127.0.0.1 -address=/beeho.site/127.0.0.1 -address=/bench-life.me/127.0.0.1 -address=/bensezhiye.com/127.0.0.1 -address=/biandaosheng.com/127.0.0.1 -address=/bigbos.top/127.0.0.1 -address=/billionfocus.com/127.0.0.1 -address=/bingyinq.com/127.0.0.1 -address=/bivitr.com/127.0.0.1 -address=/biyibia.com/127.0.0.1 -address=/bjedpt.com/127.0.0.1 -address=/bjgtsh.com/127.0.0.1 -address=/bjtrld.com/127.0.0.1 -address=/bjyikao.org/127.0.0.1 -address=/bla01.com/127.0.0.1 -address=/bllzgqbyp/127.0.0.1 -address=/bosiwangzi.cn/127.0.0.1 -address=/breezily168.com/127.0.0.1 -address=/btwan5.com/127.0.0.1 -address=/bxgmb.com/127.0.0.1 -address=/bxjpl.cn/127.0.0.1 -address=/bydonline.com/127.0.0.1 -address=/bypbwm.cn/127.0.0.1 -address=/cachesit.com/127.0.0.1 -address=/caliyuna.cn/127.0.0.1 -address=/cangnews.com/127.0.0.1 -address=/caob5.info/127.0.0.1 -address=/caolvch.com/127.0.0.1 -address=/cayanfang.com/127.0.0.1 -address=/cb.baidu.com/127.0.0.1 -address=/cbjs.baidu.com/127.0.0.1 -address=/ccbaihehq.com/127.0.0.1 -address=/cccccd.com/127.0.0.1 -address=/cctyly.com/127.0.0.1 -address=/cd-best.cn/127.0.0.1 -address=/cdnjsp.wang/127.0.0.1 -address=/cdnny.com/127.0.0.1 -address=/cdyqc.com/127.0.0.1 -address=/cfboo.com/127.0.0.1 -address=/cfcglx.com/127.0.0.1 -address=/cferw.com/127.0.0.1 -address=/cg2017.com/127.0.0.1 -address=/cgskqg.com/127.0.0.1 -address=/chadegongxiao.com/127.0.0.1 -address=/championmachinery-cn.com/127.0.0.1 -address=/chaoliangyun.com/127.0.0.1 -address=/chebse.com/127.0.0.1 -address=/chengzhao95511.com/127.0.0.1 -address=/chinaheh.com/127.0.0.1 -address=/chinaweichu.net/127.0.0.1 -address=/chmae.com/127.0.0.1 -address=/chnhty.com/127.0.0.1 -address=/chromc.com/127.0.0.1 -address=/chucity.com/127.0.0.1 -address=/chushoushijian.cn/127.0.0.1 -address=/ciajingman.com/127.0.0.1 -address=/cj-cy.com/127.0.0.1 -address=/ckseeknew.com/127.0.0.1 -address=/cmaxisolation.com/127.0.0.1 -address=/cmslayue.com/127.0.0.1 -address=/cnbole.net/127.0.0.1 -address=/cncy8.com/127.0.0.1 -address=/cnfanglei.com/127.0.0.1 -address=/cnhbxx.com/127.0.0.1 -address=/cnkok.com/127.0.0.1 -address=/cnpinzhuo.com/127.0.0.1 -address=/cnscdj.com/127.0.0.1 -address=/cnsjx.net/127.0.0.1 -address=/cnxad.net/127.0.0.1 -address=/cnzz.com.so/127.0.0.1 -address=/cnzzlink.com/127.0.0.1 -address=/code222.com/127.0.0.1 -address=/code668.com/127.0.0.1 -address=/compass-fit.jp/127.0.0.1 -address=/cooolyi.cn/127.0.0.1 -address=/corocksi.com/127.0.0.1 -address=/cosoyoo.com/127.0.0.1 -address=/couqm.com.cn/127.0.0.1 -address=/cpcv.cc/127.0.0.1 -address=/cpms.cc/127.0.0.1 -address=/cpro.baidu.com/127.0.0.1 -address=/cpro.baidustatic.com/127.0.0.1 -address=/cpv6.com/127.0.0.1 -address=/cpva.cc/127.0.0.1 -address=/cqfangduan.com/127.0.0.1 -address=/cqftonline.com/127.0.0.1 -address=/cqhnm.com/127.0.0.1 -address=/cqyhd.com/127.0.0.1 -address=/crdrjs.info/127.0.0.1 -address=/cre99.com/127.0.0.1 -address=/csqiulong.com/127.0.0.1 -address=/cssdiv.club/127.0.0.1 -address=/cstoa.com/127.0.0.1 -address=/csxjys.com/127.0.0.1 -address=/ctrhfd.top/127.0.0.1 -address=/ctsywy.com/127.0.0.1 -address=/cxd-ailegou.com/127.0.0.1 -address=/cyacc.com/127.0.0.1 -address=/cylinderlongcheng.com/127.0.0.1 -address=/czdqhyo1.net/127.0.0.1 -address=/czjiuding.cn/127.0.0.1 -address=/czpush.com/127.0.0.1 -address=/czpwm.com/127.0.0.1 -address=/d15cjcet1djbmv.cloudfront.net/127.0.0.1 -address=/d3qk9u6c2k2cid.cloudfront.net/127.0.0.1 -address=/dadjia.com/127.0.0.1 -address=/dahanedu.com/127.0.0.1 -address=/daima123.cc/127.0.0.1 -address=/dalianhengtai.com/127.0.0.1 -address=/danangmo.cn/127.0.0.1 -address=/dandan11.top/127.0.0.1 -address=/dandan13.top/127.0.0.1 -address=/dandan15.top/127.0.0.1 -address=/danpinwu.com/127.0.0.1 -address=/dante2007.com/127.0.0.1 -address=/dashet.com/127.0.0.1 -address=/datafastguru.info/127.0.0.1 -address=/dawwx.com/127.0.0.1 -address=/dazhonghua.cn/127.0.0.1 -address=/dbncp.com/127.0.0.1 -address=/ddhtek.com/127.0.0.1 -address=/ddomm.com/127.0.0.1 -address=/detuns.com/127.0.0.1 -address=/df3n43m.com/127.0.0.1 -address=/df77.com/127.0.0.1 -address=/dgpzx.com/127.0.0.1 -address=/dhxyzx.cn/127.0.0.1 -address=/diaojiaoji168.com/127.0.0.1 -address=/dilcn.net/127.0.0.1 -address=/dingon.com.cn/127.0.0.1 -address=/dingyuanyao.cn/127.0.0.1 -address=/dleke.com/127.0.0.1 -address=/dlhygj.com/127.0.0.1 -address=/dlkjgjmy.com/127.0.0.1 -address=/dlpifu.com/127.0.0.1 -address=/dlrijiaele.com/127.0.0.1 -address=/dlzjdesign.com/127.0.0.1 -address=/dnvus.com/127.0.0.1 -address=/door2new.net/127.0.0.1 -address=/dou777.com/127.0.0.1 -address=/doudao.cn/127.0.0.1 -address=/dragoncent.com/127.0.0.1 -address=/dreamfull.cn/127.0.0.1 -address=/drlsf.com/127.0.0.1 -address=/drmcmm.baidu.com/127.0.0.1 -address=/drxrc.com/127.0.0.1 -address=/dshrx.com/127.0.0.1 -address=/dugbvb.com/127.0.0.1 -address=/duiwai.baidu.com/127.0.0.1 -address=/duoqumanhua.com/127.0.0.1 -address=/duusuu.com/127.0.0.1 -address=/duyihu.net/127.0.0.1 -address=/dvr8.com/127.0.0.1 -address=/dw998.com/127.0.0.1 -address=/dx1200.com/127.0.0.1 -address=/dxssiyi.com/127.0.0.1 -address=/dzjzg.com/127.0.0.1 -address=/e-demx.com/127.0.0.1 -address=/e7001.com/127.0.0.1 -address=/e7002.com/127.0.0.1 -address=/e7009.com/127.0.0.1 -address=/e701.net/127.0.0.1 -address=/e70123.com/127.0.0.1 -address=/e7015.com/127.0.0.1 -address=/e704.net/127.0.0.1 -address=/e705.net/127.0.0.1 -address=/e706.net/127.0.0.1 -address=/e708.net/127.0.0.1 -address=/e719.net/127.0.0.1 -address=/e9377f.com/127.0.0.1 -address=/ecuc123.net/127.0.0.1 -address=/edncui.net/127.0.0.1 -address=/eduad.baidu.com/127.0.0.1 -address=/eduzzjy.com/127.0.0.1 -address=/eeee500.com/127.0.0.1 -address=/eiv.baidu.com/127.0.0.1 -address=/ekeide.com/127.0.0.1 -address=/erdsyzb.com/127.0.0.1 -address=/evefashion.cn/127.0.0.1 -address=/expo123.net/127.0.0.1 -address=/eyd77s.com/127.0.0.1 -address=/ez33.org.cn/127.0.0.1 -address=/ezucods.cn/127.0.0.1 -address=/f1190.com/127.0.0.1 -address=/f2zd.com/127.0.0.1 -address=/f6ce.com/127.0.0.1 -address=/f70123.com/127.0.0.1 -address=/facebookma.cn/127.0.0.1 -address=/farm-cn.plista.com/127.0.0.1 -address=/fastable.com/127.0.0.1 -address=/fcsass.org.cn/127.0.0.1 -address=/fd7c.com/127.0.0.1 -address=/fembsflungod.com/127.0.0.1 -address=/fenggejiaju.com/127.0.0.1 -address=/ff112244.com/127.0.0.1 -address=/ffhtek.com/127.0.0.1 -address=/fjkst.com/127.0.0.1 -address=/fjmeyer.com/127.0.0.1 -address=/flowcodeapp.com/127.0.0.1 -address=/fnkjj.com/127.0.0.1 -address=/focusprolight.com/127.0.0.1 -address=/forrerri.com/127.0.0.1 -address=/founseezb.cn/127.0.0.1 -address=/fqtra.com/127.0.0.1 -address=/fst360.com/127.0.0.1 -address=/fsyzcs.com/127.0.0.1 -address=/ft76531.com/127.0.0.1 -address=/fthcz.com/127.0.0.1 -address=/fu68.com/127.0.0.1 -address=/fucnm.com/127.0.0.1 -address=/fujianryt.com/127.0.0.1 -address=/fv99.com/127.0.0.1 -address=/fwt0.com/127.0.0.1 -address=/fxmacd.com/127.0.0.1 -address=/fxtducb.cn/127.0.0.1 -address=/fydgold132.com/127.0.0.1 -address=/fytza.cn/127.0.0.1 -address=/fzglqyy.com/127.0.0.1 -address=/g1c5.com/127.0.0.1 -address=/g1f5.com/127.0.0.1 -address=/gaoxiaocup.com/127.0.0.1 -address=/gdbly.com/127.0.0.1 -address=/gdskywings.com/127.0.0.1 -address=/ge95.com/127.0.0.1 -address=/geili.co/127.0.0.1 -address=/geryi.com/127.0.0.1 -address=/gf108.com/127.0.0.1 -address=/gf1352.com/127.0.0.1 -address=/gfd80.com/127.0.0.1 -address=/gg0376.com/127.0.0.1 -address=/gg570.com/127.0.0.1 -address=/ggdoubi.com/127.0.0.1 -address=/ggweb.net/127.0.0.1 -address=/ghnmg.top/127.0.0.1 -address=/gjghy.com/127.0.0.1 -address=/glasszz.com/127.0.0.1 -address=/gm682.com/127.0.0.1 -address=/googlealiyun.cn/127.0.0.1 -address=/googletakes.com/127.0.0.1 -address=/gouzhibao.cn/127.0.0.1 -address=/govgift.com/127.0.0.1 -address=/gqswg.com/127.0.0.1 -address=/gso0.com/127.0.0.1 -address=/gszbba.cn/127.0.0.1 -address=/gtmucs.cn/127.0.0.1 -address=/guangzizai.com/127.0.0.1 -address=/guduopu.com/127.0.0.1 -address=/gugulonger.cn/127.0.0.1 -address=/guidashu.com/127.0.0.1 -address=/guoshennet.com/127.0.0.1 -address=/gwylm.com/127.0.0.1 -address=/gxejgs.com/127.0.0.1 -address=/gydag.com/127.0.0.1 -address=/gygdmy.com/127.0.0.1 -address=/gzdhzb.com/127.0.0.1 -address=/gzktpf.com/127.0.0.1 -address=/gzmjnx.cn/127.0.0.1 -address=/gzqudou.com/127.0.0.1 -address=/h0o33.cn/127.0.0.1 -address=/h9377c.com/127.0.0.1 -address=/haiwengji.net/127.0.0.1 -address=/haiyunimg.com/127.0.0.1 -address=/haiyunpush.com/127.0.0.1 -address=/hanju18.net/127.0.0.1 -address=/hanqidq.com/127.0.0.1 -address=/hao123rt.com/127.0.0.1 -address=/hao61.net/127.0.0.1 -address=/haohaowan8.com/127.0.0.1 -address=/haolew.com/127.0.0.1 -address=/hascosafety.com/127.0.0.1 -address=/hbalx.cn/127.0.0.1 -address=/hbguohua.com/127.0.0.1 -address=/hblinwei.com/127.0.0.1 -address=/hbngfy.com/127.0.0.1 -address=/hcreditx.com/127.0.0.1 -address=/heib10.top/127.0.0.1 -address=/heib12.top/127.0.0.1 -address=/hejingroup.cn/127.0.0.1 -address=/hesxz.com/127.0.0.1 -address=/heygugu.com/127.0.0.1 -address=/hfjuki.com/127.0.0.1 -address=/hfsteel.net/127.0.0.1 -address=/hhly88.com/127.0.0.1 -address=/hhppyt.com/127.0.0.1 -address=/hi760.com/127.0.0.1 -address=/hiad.myweb.hinet.net/127.0.0.1 -address=/hivecn.cn/127.0.0.1 -address=/hkfuy.com/127.0.0.1 -address=/hmp33.com/127.0.0.1 -address=/hnasd.com/127.0.0.1 -address=/hnctsm.com/127.0.0.1 -address=/hnfpgm.com/127.0.0.1 -address=/hntymg.com/127.0.0.1 -address=/hnyny.com/127.0.0.1 -address=/hot-eam.com/127.0.0.1 -address=/houdaolj.com/127.0.0.1 -address=/hqygz.com/127.0.0.1 -address=/hr41.cn/127.0.0.1 -address=/hr44.com/127.0.0.1 -address=/hskj.net/127.0.0.1 -address=/hslyqs.com/127.0.0.1 -address=/huaerduo.com/127.0.0.1 -address=/huanqiucaizhi.com/127.0.0.1 -address=/huashengtai.net/127.0.0.1 -address=/huashuowork.com/127.0.0.1 -address=/hubojd.com/127.0.0.1 -address=/huimee.net/127.0.0.1 -address=/humanding.com/127.0.0.1 -address=/hw6.com/127.0.0.1 -address=/hxadt.com/127.0.0.1 -address=/hxgccl.cn/127.0.0.1 -address=/hxscba.com/127.0.0.1 -address=/hxyifu.com/127.0.0.1 -address=/hxyx360.com/127.0.0.1 -address=/hys4.com/127.0.0.1 -address=/hystq.com/127.0.0.1 -address=/hytgj.com/127.0.0.1 -address=/hyz86.com/127.0.0.1 -address=/hzaibi.com/127.0.0.1 -address=/i.zhuoyaju.com/127.0.0.1 -address=/i3818.com/127.0.0.1 -address=/i92xue.com/127.0.0.1 -address=/id528.com/127.0.0.1 -address=/idasai.com/127.0.0.1 -address=/idasui.cn/127.0.0.1 -address=/idcqi.com/127.0.0.1 -address=/idianfang.com/127.0.0.1 -address=/if1512.com/127.0.0.1 -address=/ihualun.com/127.0.0.1 -address=/il8r.com/127.0.0.1 -address=/img80.net/127.0.0.1 -address=/imneinei.com/127.0.0.1 -address=/iqu-operation.com/127.0.0.1 -address=/iroby.com/127.0.0.1 -address=/ishowbg.com/127.0.0.1 -address=/italy-lottery.com/127.0.0.1 -address=/iuuff.com/127.0.0.1 -address=/iwansf.com/127.0.0.1 -address=/ja9377.com/127.0.0.1 -address=/jackaow.com/127.0.0.1 -address=/jbyy010.com/127.0.0.1 -address=/jczzjx.com/127.0.0.1 -address=/jdlcg.cn/127.0.0.1 -address=/jdlhg.com/127.0.0.1 -address=/jegxny.com/127.0.0.1 -address=/jermr.com/127.0.0.1 -address=/jfqkj.com/127.0.0.1 -address=/jgchq.com/127.0.0.1 -address=/jghcy.com/127.0.0.1 -address=/jhakie.com/127.0.0.1 -address=/jhtcdj.com/127.0.0.1 -address=/jhzl001.com/127.0.0.1 -address=/jiaheyonggu.com/127.0.0.1 -address=/jiajv.net/127.0.0.1 -address=/jianbaimei.com/127.0.0.1 -address=/jianbangjiaoyu.com/127.0.0.1 -address=/jianduankm.com/127.0.0.1 -address=/jiangmg.com/127.0.0.1 -address=/jianmei123.com/127.0.0.1 -address=/jiehantai.com/127.0.0.1 -address=/jimeilm.com/127.0.0.1 -address=/jindu179.com/127.0.0.1 -address=/jinshasi.cn/127.0.0.1 -address=/jiuku.cc/127.0.0.1 -address=/jiupinshan.cn/127.0.0.1 -address=/jiyou2014.com/127.0.0.1 -address=/jjxgly.com/127.0.0.1 -address=/jk939.com/127.0.0.1 -address=/jkjjkj.top/127.0.0.1 -address=/jkmxy.com/127.0.0.1 -address=/jl027.com/127.0.0.1 -address=/jlssbz.com/127.0.0.1 -address=/jnrsjm.com/127.0.0.1 -address=/jnyngg.cn/127.0.0.1 -address=/johtzj.com/127.0.0.1 -address=/jossuer.net/127.0.0.1 -address=/joyfuldoors.com/127.0.0.1 -address=/jqz9.com/127.0.0.1 -address=/jsadt.com/127.0.0.1 -address=/jscsd.cn/127.0.0.1 -address=/jsmwd.com/127.0.0.1 -address=/junfull.com/127.0.0.1 -address=/jutou5.com/127.0.0.1 -address=/juuhe.com/127.0.0.1 -address=/jwqj.net/127.0.0.1 -address=/jxabp.com.cn/127.0.0.1 -address=/jxbjt.com/127.0.0.1 -address=/jxjzny.com/127.0.0.1 -address=/jxlqgs.com/127.0.0.1 -address=/jxwlkssb.com/127.0.0.1 -address=/jxxiangchu.com/127.0.0.1 -address=/jystea.com/127.0.0.1 -address=/kawa11.space/127.0.0.1 -address=/kawinhome.com/127.0.0.1 -address=/kele4.com/127.0.0.1 -address=/keyyou.net/127.0.0.1 -address=/kf3msfm.com/127.0.0.1 -address=/kfd3sm2c.com/127.0.0.1 -address=/kfluoa.com/127.0.0.1 -address=/kgcjgsa8.net/127.0.0.1 -address=/kguke.com/127.0.0.1 -address=/kh2134.com/127.0.0.1 -address=/kicnse.com/127.0.0.1 -address=/kingpolo.com.cn/127.0.0.1 -address=/kingwam.com/127.0.0.1 -address=/kjgen.com/127.0.0.1 -address=/kjwx8.com/127.0.0.1 -address=/kkcaicai.com/127.0.0.1 -address=/kld666.com/127.0.0.1 -address=/kldmm.com/127.0.0.1 -address=/klsdmr.com/127.0.0.1 -address=/kmadou.com/127.0.0.1 -address=/kmwqxqh.com/127.0.0.1 -address=/kod4pc293.com/127.0.0.1 -address=/kooyum.com/127.0.0.1 -address=/koukou7.com/127.0.0.1 -address=/kqy1.com/127.0.0.1 -address=/ksrsy.com/127.0.0.1 -address=/kt220.com/127.0.0.1 -address=/ktunions.com/127.0.0.1 -address=/ktv0311.com/127.0.0.1 -address=/ku9377.com/127.0.0.1 -address=/kuaipai666.cn/127.0.0.1 -address=/kuwoyy.com/127.0.0.1 -address=/kwiago.com/127.0.0.1 -address=/kxrxh.com/127.0.0.1 -address=/langchars.com/127.0.0.1 -address=/lanxiangji.com/127.0.0.1 -address=/laolinow.com/127.0.0.1 -address=/lashou1000.com/127.0.0.1 -address=/le4le.com/127.0.0.1 -address=/leamain.net/127.0.0.1 -address=/leeyuoxs.com/127.0.0.1 -address=/leztc.com/127.0.0.1 -address=/lflili.com/127.0.0.1 -address=/lhafy.com/127.0.0.1 -address=/lhengilin.com/127.0.0.1 -address=/lhusy.com/127.0.0.1 -address=/liangziweixg.com/127.0.0.1 -address=/lifu11.com/127.0.0.1 -address=/liliwoin.top/127.0.0.1 -address=/linkbide.com/127.0.0.1 -address=/linkpage.cn/127.0.0.1 -address=/lishuanghao.com/127.0.0.1 -address=/litlif.net/127.0.0.1 -address=/livehapp.com/127.0.0.1 -address=/llqss.top/127.0.0.1 -address=/lnctc.net/127.0.0.1 -address=/lnfund.org.cn/127.0.0.1 -address=/loandatec.com/127.0.0.1 -address=/log.interest.mix.sina.com.cn/127.0.0.1 -address=/lovestyl.com/127.0.0.1 -address=/lsper.top/127.0.0.1 -address=/lsxmg.com/127.0.0.1 -address=/ltcprtc.com/127.0.0.1 -address=/lthxz.cn/127.0.0.1 -address=/lu.sogou.com/127.0.0.1 -address=/lu.sogoucdn.com/127.0.0.1 -address=/lubosheng.cn/127.0.0.1 -address=/lucting.cn/127.0.0.1 -address=/lvehaisen.com/127.0.0.1 -address=/lxqcgj.com/127.0.0.1 -address=/lyaeccn.com/127.0.0.1 -address=/lygshgj.com/127.0.0.1 -address=/lyhdream.com/127.0.0.1 -address=/lyraik.cn/127.0.0.1 -address=/lyrymy.com/127.0.0.1 -address=/lytubaobao.com/127.0.0.1 -address=/lyztdz.com/127.0.0.1 -address=/lzmm8.com/127.0.0.1 -address=/lzwla.top/127.0.0.1 -address=/maibahe300cc.com/127.0.0.1 -address=/mainbx.com/127.0.0.1 -address=/maisoncherry.com/127.0.0.1 -address=/maizhenai.cn/127.0.0.1 -address=/mall043.com/127.0.0.1 -address=/maskbaby.com.cn/127.0.0.1 -address=/meimeidaren.com/127.0.0.1 -address=/meiti1.net/127.0.0.1 -address=/menghuanzs.com/127.0.0.1 -address=/mengmengdas.com/127.0.0.1 -address=/mgwcn.com/127.0.0.1 -address=/mingxianshanghang.cn/127.0.0.1 -address=/mingysh.com/127.0.0.1 -address=/mkaqh.cn/127.0.0.1 -address=/mlt01.com/127.0.0.1 -address=/mnxtu.com/127.0.0.1 -address=/moodoocrv.com.cn/127.0.0.1 -address=/moonwish.com.cn/127.0.0.1 -address=/motohelpr.com/127.0.0.1 -address=/moutaihotel.cn/127.0.0.1 -address=/mrksys.com/127.0.0.1 -address=/ms758.com/127.0.0.1 -address=/mscimg.com/127.0.0.1 -address=/msltzer.cn/127.0.0.1 -address=/mstzym.com/127.0.0.1 -address=/mtqys.com/127.0.0.1 -address=/mu722.com/127.0.0.1 -address=/mwlucuvbyrff.com/127.0.0.1 -address=/mxmrt.com/127.0.0.1 -address=/mytzdhz.cn/127.0.0.1 -address=/myzk1.com/127.0.0.1 -address=/namemek.com/127.0.0.1 -address=/nbhxgjz.com/127.0.0.1 -address=/nbjjd.com/127.0.0.1 -address=/nbzq.net/127.0.0.1 -address=/ncachear.com/127.0.0.1 -address=/nchte.com/127.0.0.1 -address=/ndtzx.com/127.0.0.1 -address=/ne9377.com/127.0.0.1 -address=/newtech-beauty.com/127.0.0.1 -address=/nextcps.com/127.0.0.1 -address=/niuxgame77.com/127.0.0.1 -address=/njdijiani.com/127.0.0.1 -address=/njfsk.com/127.0.0.1 -address=/njq.net/127.0.0.1 -address=/njwxh.com/127.0.0.1 -address=/nkeo.top/127.0.0.1 -address=/nmkgs.cn/127.0.0.1 -address=/nmpcdn.com/127.0.0.1 -address=/nmqbg.com/127.0.0.1 -address=/nnedbx.com/127.0.0.1 -address=/nngft.com/127.0.0.1 -address=/noberlmall.com/127.0.0.1 -address=/nongsalei.com/127.0.0.1 -address=/notice.uchome.manyou.com/127.0.0.1 -address=/nowskip.com/127.0.0.1 -address=/nr1234.com/127.0.0.1 -address=/nsnmiaomu.cn/127.0.0.1 -address=/nterbx.com/127.0.0.1 -address=/nthtcs.com/127.0.0.1 -address=/nunc-china.com/127.0.0.1 -address=/nxrhs.com/127.0.0.1 -address=/nydql.com/127.0.0.1 -address=/nysita.com/127.0.0.1 -address=/nzezn.com/127.0.0.1 -address=/officeme.cn/127.0.0.1 -address=/oikxlcv.wang/127.0.0.1 -address=/okm918.com/127.0.0.1 -address=/okmgy.cn/127.0.0.1 -address=/olmvkq.cn/127.0.0.1 -address=/onlifjj.net/127.0.0.1 -address=/onsnv.com/127.0.0.1 -address=/openxt.cn/127.0.0.1 -address=/oq68.com/127.0.0.1 -address=/orchidscape.net/127.0.0.1 -address=/p3tt.com/127.0.0.1 -address=/panel-cn.com/127.0.0.1 -address=/papajia55.com/127.0.0.1 -address=/partner-safe.men/127.0.0.1 -address=/partnerwork.men/127.0.0.1 -address=/pay838.com/127.0.0.1 -address=/pcmzn.com/127.0.0.1 -address=/pdsjycm.com/127.0.0.1 -address=/pedailyu.com/127.0.0.1 -address=/penggua.com.cn/127.0.0.1 -address=/picsinfog.com/127.0.0.1 -address=/pistraving.co/127.0.0.1 -address=/pjtymy.cn/127.0.0.1 -address=/pnhfc.com/127.0.0.1 -address=/pofang.com/127.0.0.1 -address=/polkoa.com/127.0.0.1 -address=/pos.baidu.com/127.0.0.1 -address=/powergg.top/127.0.0.1 -address=/poyang.com/127.0.0.1 -address=/pr00001.com/127.0.0.1 -address=/prohibited.cn/127.0.0.1 -address=/ptdrw.com/127.0.0.1 -address=/ptkhy.com/127.0.0.1 -address=/pubbirdf.com/127.0.0.1 -address=/pyzkk.com/127.0.0.1 -address=/qbyy010.com/127.0.0.1 -address=/qdchunyu.com/127.0.0.1 -address=/qgss8.com/127.0.0.1 -address=/qhaif.com/127.0.0.1 -address=/qi-duo.com/127.0.0.1 -address=/qiailm.com/127.0.0.1 -address=/qigemm.com/127.0.0.1 -address=/qingqu.la/127.0.0.1 -address=/qiqivv.com/127.0.0.1 -address=/qiqiww.com/127.0.0.1 -address=/qiqiyii.com/127.0.0.1 -address=/qjjtc.com/127.0.0.1 -address=/qmkdy.com/127.0.0.1 -address=/qmname.com/127.0.0.1 -address=/qoiusky.com/127.0.0.1 -address=/qqm98.com/127.0.0.1 -address=/qsbz2011.com/127.0.0.1 -address=/qshxc.com/127.0.0.1 -address=/qtmojo.cn/127.0.0.1 -address=/quadasdata.cn/127.0.0.1 -address=/quansj.cn/127.0.0.1 -address=/qucaigg.com/127.0.0.1 -address=/queene.cn/127.0.0.1 -address=/quw18.com/127.0.0.1 -address=/qwedcfv.com/127.0.0.1 -address=/qxfly.com/127.0.0.1 -address=/qxjdlf.com/127.0.0.1 -address=/qxxys.com/127.0.0.1 -address=/qyctj.com/127.0.0.1 -address=/qytyf.com/127.0.0.1 -address=/qzdfc.com/127.0.0.1 -address=/qzkxt.com/127.0.0.1 -address=/qzzljx.com/127.0.0.1 -address=/rangeblessedness.men/127.0.0.1 -address=/rdiqt.cn/127.0.0.1 -address=/re.taotaosou.com/127.0.0.1 -address=/reliancevalve.com/127.0.0.1 -address=/remotedu.cn/127.0.0.1 -address=/rencai56.com/127.0.0.1 -address=/resetgey.com/127.0.0.1 -address=/rhgyg.com/127.0.0.1 -address=/rideraid.net/127.0.0.1 -address=/riqu2015.com/127.0.0.1 -address=/rmetop.com/127.0.0.1 -address=/rnfrfxqztlno.com/127.0.0.1 -address=/roay.cn/127.0.0.1 -address=/rongchengxxw.com/127.0.0.1 -address=/rpaulfrank.com/127.0.0.1 -address=/rqgsf.com/127.0.0.1 -address=/rrsubway.com/127.0.0.1 -address=/runiman.com/127.0.0.1 -address=/ruxianke.com/127.0.0.1 -address=/rwjfs.com/127.0.0.1 -address=/s400cc.com/127.0.0.1 -address=/s9w.cc/127.0.0.1 -address=/saferwet.com/127.0.0.1 -address=/sangxi.top/127.0.0.1 -address=/sbrqp.com/127.0.0.1 -address=/scfatao.com/127.0.0.1 -address=/sciencelolb.com/127.0.0.1 -address=/sclizhong.com/127.0.0.1 -address=/scriptcc.cc/127.0.0.1 -address=/scw0.com/127.0.0.1 -address=/sdhzstone.net/127.0.0.1 -address=/sdqoi2d.com/127.0.0.1 -address=/sdycd.com/127.0.0.1 -address=/sfloushi.com/127.0.0.1 -address=/sgbfjs.info/127.0.0.1 -address=/shama5.com/127.0.0.1 -address=/shandongkuntuo.com/127.0.0.1 -address=/shanglinli.com/127.0.0.1 -address=/sharedaddomain.com/127.0.0.1 -address=/sharrysweb.com/127.0.0.1 -address=/shbywsd.cn/127.0.0.1 -address=/shenyian.net/127.0.0.1 -address=/shiftrro.com/127.0.0.1 -address=/show.kc.taotaosou.com/127.0.0.1 -address=/shucaihangjia.com/127.0.0.1 -address=/shushijiameng123.com/127.0.0.1 -address=/shxinjie.cn/127.0.0.1 -address=/si9377.com/127.0.0.1 -address=/sicentlife.com/127.0.0.1 -address=/sigbusa.com/127.0.0.1 -address=/sigo99.com/127.0.0.1 -address=/sinaalicdn.com/127.0.0.1 -address=/sinaaliyun.cn/127.0.0.1 -address=/sino-seve.com/127.0.0.1 -address=/sitemobia.com/127.0.0.1 -address=/sjy-stone.com.cn/127.0.0.1 -address=/skatehot.net/127.0.0.1 -address=/smitionsory.co/127.0.0.1 -address=/smucdn.com/127.0.0.1 -address=/smxsg.com/127.0.0.1 -address=/snnnyy.com/127.0.0.1 -address=/so9l.com/127.0.0.1 -address=/socdm.com/127.0.0.1 -address=/sos0easy.com/127.0.0.1 -address=/sp96878.com/127.0.0.1 -address=/spcode.baidu.com/127.0.0.1 -address=/sqext.com/127.0.0.1 -address=/sscefsol.com/127.0.0.1 -address=/ssdaili.com/127.0.0.1 -address=/ssjy168.com/127.0.0.1 -address=/sstc360.com/127.0.0.1 -address=/st123.info/127.0.0.1 -address=/staqnet.com/127.0.0.1 -address=/static-cn.plista.com/127.0.0.1 -address=/stn88.com/127.0.0.1 -address=/stocksbsc.com/127.0.0.1 -address=/stsywl.com/127.0.0.1 -address=/sub.topber.com/127.0.0.1 -address=/sucodb.com/127.0.0.1 -address=/sufficient.cn/127.0.0.1 -address=/sunjianhao.com/127.0.0.1 -address=/superfastcdn.com/127.0.0.1 -address=/sxbhzs.net/127.0.0.1 -address=/sxdyrq.com/127.0.0.1 -address=/sxz67.com/127.0.0.1 -address=/sxzmj.cn/127.0.0.1 -address=/sykty.com/127.0.0.1 -address=/syofew6o.net/127.0.0.1 -address=/sytcyf.com/127.0.0.1 -address=/sytz1288.com/127.0.0.1 -address=/szdzbx.com/127.0.0.1 -address=/szfaq.com/127.0.0.1 -address=/szggdw.com/127.0.0.1 -address=/szrk3.com/127.0.0.1 -address=/szxiuchang.com/127.0.0.1 -address=/szxpsg.com/127.0.0.1 -address=/t70123.com/127.0.0.1 -address=/taat00889.com/127.0.0.1 -address=/tad.suning.com/127.0.0.1 -address=/tangoutianxia.com/127.0.0.1 -address=/taobaly.cn/127.0.0.1 -address=/taobaoaliyun.cn/127.0.0.1 -address=/taobayun.cn/127.0.0.1 -address=/taohanpai.com/127.0.0.1 -address=/tbaocdn.com/127.0.0.1 -address=/tc600.com/127.0.0.1 -address=/tdayi.com/127.0.0.1 -address=/tequanma.com/127.0.0.1 -address=/tg.1155t.cn/127.0.0.1 -address=/tg.52digua.com/127.0.0.1 -address=/th21333.com/127.0.0.1 -address=/thescenseproject.com/127.0.0.1 -address=/thli43.cn/127.0.0.1 -address=/thxnr.com/127.0.0.1 -address=/thyvjboy.com/127.0.0.1 -address=/tiangu99.com/127.0.0.1 -address=/tianqi777.com/127.0.0.1 -address=/tianyanzs.com/127.0.0.1 -address=/tinglian.com/127.0.0.1 -address=/tjgxzs.com/127.0.0.1 -address=/tjqonline.cn/127.0.0.1 -address=/tkd777.cn/127.0.0.1 -address=/tongdejiayuan.com/127.0.0.1 -address=/tongqing2015.com/127.0.0.1 -address=/toourbb.com/127.0.0.1 -address=/top267.com/127.0.0.1 -address=/tpe163.com/127.0.0.1 -address=/tradeccl.com/127.0.0.1 -address=/trzina.com/127.0.0.1 -address=/tsdlp.com/127.0.0.1 -address=/ttfgames.cn/127.0.0.1 -address=/ttlowe.com/127.0.0.1 -address=/tukeai.com/127.0.0.1 -address=/twitterzs.com/127.0.0.1 -address=/twldmx.com/127.0.0.1 -address=/twzui6.com/127.0.0.1 -address=/ty229.com/127.0.0.1 -address=/tylll.com/127.0.0.1 -address=/u.huoying666.com/127.0.0.1 -address=/ubmcvideo.baidustatic.com/127.0.0.1 -address=/uc610.com/127.0.0.1 -address=/ucaliyun.cn/127.0.0.1 -address=/ucrzgcs.cn/127.0.0.1 -address=/ucxxii.com/127.0.0.1 -address=/udrwyjpwjfeg.com/127.0.0.1 -address=/ugg66.com/127.0.0.1 -address=/ujikdd041o.cn/127.0.0.1 -address=/ukeiae.com/127.0.0.1 -address=/uoyrsd.com/127.0.0.1 -address=/urhu.cn/127.0.0.1 -address=/uvclick.com/127.0.0.1 -address=/uw9377.com/127.0.0.1 -address=/uzpmrbek.com/127.0.0.1 -address=/v707070.com/127.0.0.1 -address=/vdazz.net/127.0.0.1 -address=/vedeh.com/127.0.0.1 -address=/vegent.cn/127.0.0.1 -address=/velocecdn.com/127.0.0.1 -address=/victorjx.com/127.0.0.1 -address=/videondun.com/127.0.0.1 -address=/vlion.cn/127.0.0.1 -address=/vmjjzk.cn/127.0.0.1 -address=/vnnv777.cn/127.0.0.1 -address=/vtale.org/127.0.0.1 -address=/vu7r6.cn/127.0.0.1 -address=/vvvulqn7.com/127.0.0.1 -address=/vwws6.net/127.0.0.1 -address=/w3989.com/127.0.0.1 -address=/w65p.com/127.0.0.1 -address=/waihui518.com/127.0.0.1 -address=/wangdaizao.com/127.0.0.1 -address=/wangdddy.com/127.0.0.1 -address=/wangdq.com/127.0.0.1 -address=/wangsufast.com/127.0.0.1 -address=/wantaico.com/127.0.0.1 -address=/wantfour.com/127.0.0.1 -address=/wapadv.com/127.0.0.1 -address=/waptime.net/127.0.0.1 -address=/wazero.online/127.0.0.1 -address=/wcnmd.top/127.0.0.1 -address=/wdzsb.com.cn/127.0.0.1 -address=/weiqiqu.cn/127.0.0.1 -address=/weixiangzu.cn/127.0.0.1 -address=/werpig.com/127.0.0.1 -address=/wffengtai.com.cn/127.0.0.1 -address=/wgnlz.com/127.0.0.1 -address=/wgnmp.com/127.0.0.1 -address=/whafwl.com/127.0.0.1 -address=/whpxy.com/127.0.0.1 -address=/whytoss.com/127.0.0.1 -address=/wikigifth.com/127.0.0.1 -address=/winvestern.com.cn/127.0.0.1 -address=/wjguc.com/127.0.0.1 -address=/wka8.com/127.0.0.1 -address=/wlkpa.cn/127.0.0.1 -address=/wodhid.com/127.0.0.1 -address=/wole.us/127.0.0.1 -address=/wowips.com/127.0.0.1 -address=/wqsph.net/127.0.0.1 -address=/wrvdmh.cn/127.0.0.1 -address=/ws341.com/127.0.0.1 -address=/ws7j.com/127.0.0.1 -address=/wstztt.com/127.0.0.1 -address=/wu65.com/127.0.0.1 -address=/wuwaii.com/127.0.0.1 -address=/wuwho.cn/127.0.0.1 -address=/wxbdfm.com/127.0.0.1 -address=/wyhzzy.com/127.0.0.1 -address=/wyttech.cn/127.0.0.1 -address=/wywsdx.com/127.0.0.1 -address=/wzaigo.com/127.0.0.1 -address=/wzjijia.com/127.0.0.1 -address=/wzsygdl.com/127.0.0.1 -address=/x6z6.com/127.0.0.1 -address=/x9377a.com/127.0.0.1 -address=/xa9t.com/127.0.0.1 -address=/xabaitai.com/127.0.0.1 -address=/xabmjr.com/127.0.0.1 -address=/xcclzs.com/127.0.0.1 -address=/xchgx.com/127.0.0.1 -address=/xcjy876.com/127.0.0.1 -address=/xcy8.com/127.0.0.1 -address=/xcyjzs.net/127.0.0.1 -address=/xcyrc.com/127.0.0.1 -address=/xdbwc.com/127.0.0.1 -address=/xdcqcyp.com/127.0.0.1 -address=/xhbqczl.com/127.0.0.1 -address=/xhmrv.com/127.0.0.1 -address=/xhsxgmt.cn/127.0.0.1 -address=/xhxnkyy.com/127.0.0.1 -address=/xhydrs.cn/127.0.0.1 -address=/xiald.com/127.0.0.1 -address=/xiaobiaoucai.cn/127.0.0.1 -address=/xiaoyang.mobi/127.0.0.1 -address=/xiaozhishi852.com/127.0.0.1 -address=/xiaxuanfu.com/127.0.0.1 -address=/xibei70.com/127.0.0.1 -address=/xihashuale.com/127.0.0.1 -address=/xilele.com/127.0.0.1 -address=/xiliweisha.cn/127.0.0.1 -address=/xinasiaj.com/127.0.0.1 -address=/xingjuhe.com/127.0.0.1 -address=/xiongdong.com/127.0.0.1 -address=/xiongyin.com/127.0.0.1 -address=/xjidian.com/127.0.0.1 -address=/xjzyq.com/127.0.0.1 -address=/xk2012.com/127.0.0.1 -address=/xkwfao.com/127.0.0.1 -address=/xlwnx.com/127.0.0.1 -address=/xm9178.com/127.0.0.1 -address=/xmcmn.com/127.0.0.1 -address=/xmsqz.com/127.0.0.1 -address=/xnjpg.com/127.0.0.1 -address=/xoredi.com/127.0.0.1 -address=/xpqfc.com/127.0.0.1 -address=/xq199.com/127.0.0.1 -address=/xtianqi.com.cn/127.0.0.1 -address=/xtxa.net/127.0.0.1 -address=/xuanmeiguoji.com/127.0.0.1 -address=/xul478.com/127.0.0.1 -address=/xulizui6.com/127.0.0.1 -address=/xvtpvc.cn/127.0.0.1 -address=/xxad.cc/127.0.0.1 -address=/xxhrd.com/127.0.0.1 -address=/xxlmxsh.com/127.0.0.1 -address=/xxwkjl.com/127.0.0.1 -address=/xxyzwtsylw.com/127.0.0.1 -address=/xycnz.com/127.0.0.1 -address=/xyqptm.com/127.0.0.1 -address=/xyqxr.com/127.0.0.1 -address=/xyrhd.com/127.0.0.1 -address=/xyssp.com/127.0.0.1 -address=/xytom.com/127.0.0.1 -address=/xzyituo.com/127.0.0.1 -address=/xzzyi.com/127.0.0.1 -address=/yageben.com/127.0.0.1 -address=/yamaidei.cn/127.0.0.1 -address=/yangdasen.cn/127.0.0.1 -address=/yanglaopt.net/127.0.0.1 -address=/yaohq.com/127.0.0.1 -address=/yatemy.cn/127.0.0.1 -address=/ychml.com/127.0.0.1 -address=/ychun03.com/127.0.0.1 -address=/ydlnt.com/127.0.0.1 -address=/yenlm.com/127.0.0.1 -address=/yf898.com/127.0.0.1 -address=/yfycy.com/127.0.0.1 -address=/yhsmk.com/127.0.0.1 -address=/yhtcd.com/127.0.0.1 -address=/yidulive.net/127.0.0.1 -address=/yigyx.com/127.0.0.1 -address=/yijia2009.com/127.0.0.1 -address=/yijikm.com/127.0.0.1 -address=/yinhaijuan.com/127.0.0.1 -address=/yinyuehu.cn/127.0.0.1 -address=/yiranxian.cn/127.0.0.1 -address=/yiwuds.com/127.0.0.1 -address=/yixui.com/127.0.0.1 -address=/yjkyj.cn/127.0.0.1 -address=/yk0712.com/127.0.0.1 -address=/ykjmy.com/127.0.0.1 -address=/ymcqb.com/127.0.0.1 -address=/ynbojie.com/127.0.0.1 -address=/yndianju.com/127.0.0.1 -address=/ynmbz.com/127.0.0.1 -address=/ynwqls.com/127.0.0.1 -address=/yongkang6.com/127.0.0.1 -address=/youfumei.com/127.0.0.1 -address=/yousee.com/127.0.0.1 -address=/youyoumw.com/127.0.0.1 -address=/ypmob.com/127.0.0.1 -address=/yqcy988.com/127.0.0.1 -address=/yqw88.com/127.0.0.1 -address=/ysjwj.com/127.0.0.1 -address=/yule8.net/127.0.0.1 -address=/ywjxsp168.cn/127.0.0.1 -address=/yxjad.com/127.0.0.1 -address=/yxszy.com/127.0.0.1 -address=/yxxwyz.com/127.0.0.1 -address=/yy58ju.com/127.0.0.1 -address=/yyp17.com/127.0.0.1 -address=/yzh360.com/127.0.0.1 -address=/yzygo.com/127.0.0.1 -address=/yzytb.com/127.0.0.1 -address=/zantainet.com/127.0.0.1 -address=/zcrtd.com/127.0.0.1 -address=/zdjby.cn/127.0.0.1 -address=/zgc66.com/127.0.0.1 -address=/zgksb.com/127.0.0.1 -address=/zgunion.cn/127.0.0.1 -address=/zgyemy.com/127.0.0.1 -address=/zhao258.com/127.0.0.1 -address=/zhichi08.com/127.0.0.1 -address=/zhihei.com/127.0.0.1 -address=/zhinengap.com/127.0.0.1 -address=/zhiong.net/127.0.0.1 -address=/zhjfad.com/127.0.0.1 -address=/zhongzk.com/127.0.0.1 -address=/zhuba8.com/127.0.0.1 -address=/zhudiaosz.com/127.0.0.1 -address=/zhufushuo.com/127.0.0.1 -address=/zhybzp.cn/127.0.0.1 -address=/zjhim.com/127.0.0.1 -address=/zjhoudao.com/127.0.0.1 -address=/zp22938576.com/127.0.0.1 -address=/zqworks.com/127.0.0.1 -address=/zrpfk.com/127.0.0.1 -address=/zsdexun.com.cn/127.0.0.1 -address=/ztidu.com/127.0.0.1 -address=/zxwdw.com/127.0.0.1 -address=/zybpj.com/127.0.0.1 -address=/zymro.com/127.0.0.1 -address=/zyrfanli.com/127.0.0.1 -address=/zzbaowen.com/127.0.0.1 -address=/zzrcz.com/127.0.0.1 -address=/zzyonghao.com/127.0.0.1 -address=/0x013d.website/127.0.0.1 -address=/0x01e7.website/127.0.0.1 -address=/1.hao123.com/127.0.0.1 -address=/100.admin5.com/127.0.0.1 -address=/100.pncdn.cn/127.0.0.1 -address=/104.37.245.11/127.0.0.1 -address=/108.171.248.234/127.0.0.1 -address=/115.29.141.121/127.0.0.1 -address=/119.29.80.185/127.0.0.1 -address=/120.27.34.156/127.0.0.1 -address=/122.228.236.165/127.0.0.1 -address=/125.46.61.28/127.0.0.1 -address=/162.212.181.32/127.0.0.1 -address=/20150930.cf/127.0.0.1 -address=/2016.bkill.net/127.0.0.1 -address=/205.209.138.102/127.0.0.1 -address=/33lm.cc/127.0.0.1 -address=/360safego.com/127.0.0.1 -address=/3dm.huya.com/127.0.0.1 -address=/5y9nfpes.52pk.com/127.0.0.1 -address=/61.147.184.18/127.0.0.1 -address=/69.28.57.245/127.0.0.1 -address=/7mad.7m.cn/127.0.0.1 -address=/7xsf3h.com1.z0.glb.clouddn.com/127.0.0.1 -address=/801.tianyaui.com/127.0.0.1 -address=/8jkx.com/127.0.0.1 -address=/a-m-s.poco.cn/127.0.0.1 -address=/a.baiy.net/127.0.0.1 -address=/a.baomihua.com/127.0.0.1 -address=/a.nowscore.com/127.0.0.1 -address=/a.xizi.com/127.0.0.1 -address=/a.xywy.com/127.0.0.1 -address=/a2.b310.com/127.0.0.1 -address=/a2.xinhuanet.com/127.0.0.1 -address=/a4.yeshj.com/127.0.0.1 -address=/a5.yeshj.com/127.0.0.1 -address=/abc.hkepc.com/127.0.0.1 -address=/acodes.b2b.cn/127.0.0.1 -address=/ad-api.cnblogs.com/127.0.0.1 -address=/ad-img.diyidan.net/127.0.0.1 -address=/ad.walkgame.com/127.0.0.1 -address=/adadmin.house365.com/127.0.0.1 -address=/adbox.sina.com.cn/127.0.0.1 -address=/adcast.fblife.com/127.0.0.1 -address=/add.freeimg8.com/127.0.0.1 -address=/adf.dahe.cn/127.0.0.1 -address=/adhome.1fangchan.com/127.0.0.1 -address=/adm.265g.com/127.0.0.1 -address=/adm.6park.com/127.0.0.1 -address=/adm.86wan.com/127.0.0.1 -address=/adm.cloud.cnfol.com/127.0.0.1 -address=/adm.xmfish.com/127.0.0.1 -address=/adm.zbinfo.net/127.0.0.1 -address=/admd.housefun.com.tw/127.0.0.1 -address=/admd.yam.com/127.0.0.1 -address=/admx.baixing.com/127.0.0.1 -address=/adnetpub.yaolan.com/127.0.0.1 -address=/adp.cnki.net/127.0.0.1 -address=/adp.cnool.net/127.0.0.1 -address=/adpai.thepaper.cn/127.0.0.1 -address=/adpub.yaolan.com/127.0.0.1 -address=/adpubs.yaolan.com/127.0.0.1 -address=/ads-union.jd.com/127.0.0.1 -address=/ads.sohu.com/127.0.0.1 -address=/adsclick.yx.js.cn/127.0.0.1 -address=/adserve2.tom.com/127.0.0.1 -address=/adshows.21cn.com/127.0.0.1 -address=/afp.chinanews.com/127.0.0.1 -address=/afp.wasu.cn/127.0.0.1 -address=/afpcreative.wasu.cn/127.0.0.1 -address=/ahd.ruten.com.tw/127.0.0.1 -address=/ai.bioon.com/127.0.0.1 -address=/alitui.weibo.com/127.0.0.1 -address=/am.szhome.com/127.0.0.1 -address=/amfi.gou.sogou.com/127.0.0.1 -address=/ams.fx678.com/127.0.0.1 -address=/ann5.net/127.0.0.1 -address=/ao.r7f.ifeng.com/127.0.0.1 -address=/apple.www.letv.com/127.0.0.1 -address=/as.g4.ifeng.com/127.0.0.1 -address=/as.sinahk.net/127.0.0.1 -address=/asdfz.b0.upaiyun.com/127.0.0.1 -address=/asdfz.vpszt.com/127.0.0.1 -address=/ashow.pcpop.com/127.0.0.1 -address=/atiws.aipai.com/127.0.0.1 -address=/atm.youku.com/127.0.0.1 -address=/ax.ifeng.com/127.0.0.1 -address=/b.baiy.net/127.0.0.1 -address=/baifen.music.baidu.com/127.0.0.1 -address=/bb.tuku.cc/127.0.0.1 -address=/besc.baidustatic.com/127.0.0.1 -address=/biz.gexing.com/127.0.0.1 -address=/biz.weibo.com/127.0.0.1 -address=/bk9gun.vpser.net/127.0.0.1 -address=/boardx.huanqiu.com/127.0.0.1 -address=/btn.onlylady.com/127.0.0.1 -address=/btn.pchome.net/127.0.0.1 -address=/business.92wy.com/127.0.0.1 -address=/by8974.com/127.0.0.1 -address=/c-5uwzmx78pmca09x24aiux2euavx2ekwu.g00.msn.com/127.0.0.1 -address=/cacafly.net/127.0.0.1 -address=/ccr.yxdown.com/127.0.0.1 -address=/cdn.wuyou.ca/127.0.0.1 -address=/chidir.com/127.0.0.1 -address=/client.88tours.com/127.0.0.1 -address=/cmm.xmfish.com/127.0.0.1 -address=/cocoawu.b0.upaiyun.com/127.0.0.1 -address=/cpm.cm.kankan.com/127.0.0.1 -address=/d.taomato.com/127.0.0.1 -address=/d0.xcar.com.cn/127.0.0.1 -address=/d1.3158.cn/127.0.0.1 -address=/da.mgtv.com/127.0.0.1 -address=/ddd.yuyouge.com/127.0.0.1 -address=/de.as.pptv.com/127.0.0.1 -address=/deliver.ifeng.com/127.0.0.1 -address=/delivery-pc.wasu.cn/127.0.0.1 -address=/delivery.playallvideos.com/127.0.0.1 -address=/delivery.wasu.cn/127.0.0.1 -address=/dfad.dfdaily.com/127.0.0.1 -address=/diyijs.duapp.com/127.0.0.1 -address=/djs.baomihua.com/127.0.0.1 -address=/dm1.tom61.com/127.0.0.1 -address=/doubleclick.tv002.com/127.0.0.1 -address=/dsp.ali213.net/127.0.0.1 -address=/dup.baidustatic.com/127.0.0.1 -address=/dvs.china.com/127.0.0.1 -address=/dvser.china.com/127.0.0.1 -address=/dydab.com/127.0.0.1 -address=/e.yycqc.com/127.0.0.1 -address=/eap.big5.enorth.com.cn/127.0.0.1 -address=/eap.enorth.com.cn/127.0.0.1 -address=/ebp.renren.com/127.0.0.1 -address=/ecma.bdimg.com/127.0.0.1 -address=/ecmb.bdimg.com/127.0.0.1 -address=/erebor.douban.com/127.0.0.1 -address=/fff.yuyouge.com/127.0.0.1 -address=/fun.ynet.com/127.0.0.1 -address=/g.chuiyao.com/127.0.0.1 -address=/g.hsw.cn/127.0.0.1 -address=/g.lznews.cn/127.0.0.1 -address=/g.mnw.cn/127.0.0.1 -address=/g.ousns.net/127.0.0.1 -address=/g2.ousns.net/127.0.0.1 -address=/g8f.ifeng.com/127.0.0.1 -address=/ganjituiguang.ganji.com/127.0.0.1 -address=/gd.vodtw.com/127.0.0.1 -address=/gdt.qq.com/127.0.0.1 -address=/gg.0598yu.com/127.0.0.1 -address=/gg.blueidea.com/127.0.0.1 -address=/gg.cs090.com/127.0.0.1 -address=/gg.gao7.com/127.0.0.1 -address=/gg.kugou.com/127.0.0.1 -address=/gg.sonhoo.com/127.0.0.1 -address=/gg.uuu9.com/127.0.0.1 -address=/gg.xingzuo360.cn/127.0.0.1 -address=/gg.yxdown.com/127.0.0.1 -address=/gg86.pinggu.org/127.0.0.1 -address=/ggcode.2345.com/127.0.0.1 -address=/ggg.xiangjiao.xxx/127.0.0.1 -address=/ggg.zj.com/127.0.0.1 -address=/ggw.gusuwang.com/127.0.0.1 -address=/ggw.watertu.com/127.0.0.1 -address=/go.hangzhou.com.cn/127.0.0.1 -address=/goto.www.iciba.com/127.0.0.1 -address=/gotourl.xyz/127.0.0.1 -address=/gp.jstv.com/127.0.0.1 -address=/greenhouseglobal.cn/127.0.0.1 -address=/gt.duowan.com/127.0.0.1 -address=/gt.yy.com/127.0.0.1 -address=/guang.lesports.com/127.0.0.1 -address=/guess.h.qhimg.com/127.0.0.1 -address=/hdad.baike.com/127.0.0.1 -address=/hiad.vmall.com/127.0.0.1 -address=/hz.shouyoutv.com/127.0.0.1 -address=/hzhyhm.com/127.0.0.1 -address=/i.syasn.com/127.0.0.1 -address=/iads.xinmin.cn/127.0.0.1 -address=/idcot.com/127.0.0.1 -address=/image.9duw.com/127.0.0.1 -address=/image.hh010.com/127.0.0.1 -address=/images.gxsky.com/127.0.0.1 -address=/img.3sjt.com/127.0.0.1 -address=/img.9duw.com/127.0.0.1 -address=/img.meipic.net/127.0.0.1 -address=/img1.126.net/127.0.0.1 -address=/img2.126.net/127.0.0.1 -address=/img2.titan007.com/127.0.0.1 -address=/imgadsame.liba.com/127.0.0.1 -address=/imgggadpic.oss-cn-shenzhen.aliyuncs.com/127.0.0.1 -address=/inte.sogou.com/127.0.0.1 -address=/ivy.pconline.com.cn/127.0.0.1 -address=/iwanad.baidu.com/127.0.0.1 -address=/j.6avz.com/127.0.0.1 -address=/jmsyzj.com/127.0.0.1 -address=/js-1.pchome.net/127.0.0.1 -address=/js.45bubu.com/127.0.0.1 -address=/js.bju888.com/127.0.0.1 -address=/js.bxwns.com/127.0.0.1 -address=/js.duotegame.com/127.0.0.1 -address=/js.hkslg520.com/127.0.0.1 -address=/js.url1175.info/127.0.0.1 -address=/jssd.uumeitu.com/127.0.0.1 -address=/jxad.jx163.com/127.0.0.1 -address=/k.16vcd.com/127.0.0.1 -address=/knnwdyou.com/127.0.0.1 -address=/kxgtbk.oss-cn-hangzhou.aliyuncs.com/127.0.0.1 -address=/lingdian98.com/127.0.0.1 -address=/ll.gxsky.com/127.0.0.1 -address=/lxting.com/127.0.0.1 -address=/m.aty.sohu.com/127.0.0.1 -address=/m2.lelemh.com/127.0.0.1 -address=/mall0.qiyipic.com/127.0.0.1 -address=/manads.static.olcdn.com/127.0.0.1 -address=/manage.wdfans.cn/127.0.0.1 -address=/market.178.com/127.0.0.1 -address=/market.21cn.com/127.0.0.1 -address=/market.duowan.com/127.0.0.1 -address=/media.cheshi-img.com/127.0.0.1 -address=/mini.hao123.com/127.0.0.1 -address=/miniye.xjts.cn/127.0.0.1 -address=/money.qz828.com/127.0.0.1 -address=/myad.toocle.com/127.0.0.1 -address=/news.yanqing-888.net/127.0.0.1 -address=/nirentang.com/127.0.0.1 -address=/o80wi1ajq.bkt.clouddn.com/127.0.0.1 -address=/oa-panther.data.aliyun.com/127.0.0.1 -address=/ok.432kkk.com/127.0.0.1 -address=/p.7060.la/127.0.0.1 -address=/p.szonline.net/127.0.0.1 -address=/p.zol-img.com.cn/127.0.0.1 -address=/p4p.sina.com.cn/127.0.0.1 -address=/p8u.hinet.net/127.0.0.1 -address=/panda.kdnet.net/127.0.0.1 -address=/partner.toutiao.com/127.0.0.1 -address=/pg-ad-b1.nosdn.127.net/127.0.0.1 -address=/phpad.cqnews.net/127.0.0.1 -address=/pic.0597kk.com/127.0.0.1 -address=/pic.111cn.net/127.0.0.1 -address=/pic.2u.com.cn/127.0.0.1 -address=/pic.ea3w.com/127.0.0.1 -address=/pic.fengniao.com/127.0.0.1 -address=/pics.xgo-img.com.cn/127.0.0.1 -address=/playad.xjmg.com/127.0.0.1 -address=/popme.163.com/127.0.0.1 -address=/poster.weather.com.cn/127.0.0.1 -address=/pro.iweihai.cn/127.0.0.1 -address=/pub.funshion.com/127.0.0.1 -address=/publish.ad.youth.cn/127.0.0.1 -address=/qd.dhzw.org/127.0.0.1 -address=/qd.js.sanjiangge.com/127.0.0.1 -address=/qd.wanjuanba.com/127.0.0.1 -address=/qd.x4399.com/127.0.0.1 -address=/qn.bejson.com/127.0.0.1 -address=/qt.biqugezw.com/127.0.0.1 -address=/resource.baomihua.com/127.0.0.1 -address=/rh.qq.com/127.0.0.1 -address=/same.chinadaily.com.cn/127.0.0.1 -address=/same.eastmoney.com/127.0.0.1 -address=/script.vccoo.com/127.0.0.1 -address=/sgg.southcn.com/127.0.0.1 -address=/share.gzdsw.com/127.0.0.1 -address=/shenleyuni.com/127.0.0.1 -address=/ssgg.chazidian.com/127.0.0.1 -address=/ssp.hinet.net/127.0.0.1 -address=/ssp.zf313.com/127.0.0.1 -address=/sss.sege.xxx/127.0.0.1 -address=/sssvd.china.com/127.0.0.1 -address=/static-ssp.yidianzixun.com/127.0.0.1 -address=/sub.powerapple.com/127.0.0.1 -address=/super.cat898.com/127.0.0.1 -address=/super.kdnet.net/127.0.0.1 -address=/synacast.com/127.0.0.1 -address=/tcjy66.cc/127.0.0.1 -address=/tf.360.cn/127.0.0.1 -address=/tk.504pk.com/127.0.0.1 -address=/tp.sgcn.com/127.0.0.1 -address=/trafficjam.cn/127.0.0.1 -address=/tt.biquge.la/127.0.0.1 -address=/u.63kc.com/127.0.0.1 -address=/u.cnzol.com/127.0.0.1 -address=/union.china.com.cn/127.0.0.1 -address=/union.yihaodian.com/127.0.0.1 -address=/untitled.dwstatic.com/127.0.0.1 -address=/up.hiao.com/127.0.0.1 -address=/v-56.com/127.0.0.1 -address=/vupload.duowan.com/127.0.0.1 -address=/web.900.la/127.0.0.1 -address=/wew.dushiwenxue.net/127.0.0.1 -address=/wpwdf.com/127.0.0.1 -address=/wuliao.epro.sogou.com/127.0.0.1 -address=/xc.macd.cn/127.0.0.1 -address=/xc.mydrivers.com/127.0.0.1 -address=/xdyjt.com/127.0.0.1 -address=/xinzheng8.pw/127.0.0.1 -address=/xs.houyi.baofeng.net/127.0.0.1 -address=/yktj.yzz.cn/127.0.0.1 -address=/yt-adp.nosdn.127.net/127.0.0.1 -address=/yunbofangbt.com/127.0.0.1 -address=/z.nowscore.com/127.0.0.1 -address=/zi.kfqdf.com/127.0.0.1 -address=/zkrdy.com/127.0.0.1 -address=/zo66.com/127.0.0.1 -address=/zt2088.com/127.0.0.1 -address=/zzimg.51.la/127.0.0.1 -address=/fpbcode.onlinedown.net/127.0.0.1 -address=/bdjs.guangyuanol.cn/127.0.0.1 -address=/003store.com/127.0.0.1 -address=/01.gxso.net/127.0.0.1 -address=/06362.com/127.0.0.1 -address=/1.1010pic.com/127.0.0.1 -address=/1.15lu.com/127.0.0.1 -address=/1.201980.com/127.0.0.1 -address=/1.51sxue.cn/127.0.0.1 -address=/1.arpun.com/127.0.0.1 -address=/1.cjcp.cn/127.0.0.1 -address=/1.codesdq.com/127.0.0.1 -address=/1.codezh.com/127.0.0.1 -address=/1.feihua.com/127.0.0.1 -address=/1.gaosanjie.net/127.0.0.1 -address=/1.glook.cn/127.0.0.1 -address=/1.hnyouneng.com/127.0.0.1 -address=/1.huilv.cc/127.0.0.1 -address=/1.hysou.com/127.0.0.1 -address=/1.i1766.com/127.0.0.1 -address=/1.iqeq.com.cn/127.0.0.1 -address=/1.jeasyui.net/127.0.0.1 -address=/1.jiqie.cn/127.0.0.1 -address=/1.kuaidiwo.cn/127.0.0.1 -address=/1.mgff.com/127.0.0.1 -address=/1.nanrenwo.net/127.0.0.1 -address=/1.panduoduo.net/127.0.0.1 -address=/1.pncdn.cn/127.0.0.1 -address=/1.proewildfire.cn/127.0.0.1 -address=/1.qt86.com/127.0.0.1 -address=/1.sj33.net/127.0.0.1 -address=/1.soufy.cn/127.0.0.1 -address=/1.tulaoshi.com/127.0.0.1 -address=/1.tuxi.com.cn/127.0.0.1 -address=/1.uc129.com/127.0.0.1 -address=/1.ufc123.com/127.0.0.1 -address=/1.win7china.com/127.0.0.1 -address=/1.win7sky.com/127.0.0.1 -address=/1.xiaopin5.com/127.0.0.1 -address=/1.xilu.com/127.0.0.1 -address=/1.yac8.net/127.0.0.1 -address=/1.zhev.com.cn/127.0.0.1 -address=/1.zou114.com/127.0.0.1 -address=/1.zouning.net/127.0.0.1 -address=/1.zw3e.com/127.0.0.1 -address=/1017.cn/127.0.0.1 -address=/11.hydcd.com/127.0.0.1 -address=/11888vip.cn/127.0.0.1 -address=/11g.yiqig.cn/127.0.0.1 -address=/1224.dxsbb.com/127.0.0.1 -address=/123456.asia/127.0.0.1 -address=/1999019.com/127.0.0.1 -address=/2.5aigushi.com/127.0.0.1 -address=/2.heiyange.com/127.0.0.1 -address=/2.mobixs.cn/127.0.0.1 -address=/2.rengshu.com/127.0.0.1 -address=/22.qingsongbar.com/127.0.0.1 -address=/283.laobanfa.com/127.0.0.1 -address=/3.guidaye.com/127.0.0.1 -address=/3.ssqzj.com/127.0.0.1 -address=/360640.com/127.0.0.1 -address=/51dengshan.cn/127.0.0.1 -address=/51gxqm.com/127.0.0.1 -address=/52linglei.com/127.0.0.1 -address=/52lubo.cn/127.0.0.1 -address=/5dian.org/127.0.0.1 -address=/5egk.com/127.0.0.1 -address=/644446.com/127.0.0.1 -address=/66.zx1234.com/127.0.0.1 -address=/6669667.com/127.0.0.1 -address=/7631.com/127.0.0.1 -address=/7car.com.cn/127.0.0.1 -address=/80juqing.com/127.0.0.1 -address=/888.izhufu.net/127.0.0.1 -address=/8dp.net/127.0.0.1 -address=/9wushuo.com/127.0.0.1 -address=/a.52wubi.com/127.0.0.1 -address=/a.52zxw.com/127.0.0.1 -address=/a.53yao.com/127.0.0.1 -address=/a.5ykj.com/127.0.0.1 -address=/a.75111.com/127.0.0.1 -address=/a.80982.org/127.0.0.1 -address=/a.android100.org/127.0.0.1 -address=/a.armystar.com/127.0.0.1 -address=/a.bizhiku.net/127.0.0.1 -address=/a.duanmeiwen.com/127.0.0.1 -address=/a.epinv.com/127.0.0.1 -address=/a.exam58.com/127.0.0.1 -address=/a.fengyx.com/127.0.0.1 -address=/a.fwsir.com/127.0.0.1 -address=/a.gerensuodeshui.cn/127.0.0.1 -address=/a.hsbianma.com/127.0.0.1 -address=/a.ihref.com/127.0.0.1 -address=/a.kandiaoyu.com/127.0.0.1 -address=/a.kejixun.com/127.0.0.1 -address=/a.lz13.cn/127.0.0.1 -address=/a.mfcad.net/127.0.0.1 -address=/a.nanhuwang.com/127.0.0.1 -address=/a.psxxw.cn/127.0.0.1 -address=/a.qinghua5.com/127.0.0.1 -address=/a.shenchuang.com/127.0.0.1 -address=/a.shuoshuodaquan.net/127.0.0.1 -address=/a.thn21.com/127.0.0.1 -address=/a.tvsou.com/127.0.0.1 -address=/a.umilu.com/127.0.0.1 -address=/a.ut8d.com/127.0.0.1 -address=/a.xinwenge.net/127.0.0.1 -address=/a.xixiyishu.com/127.0.0.1 -address=/a.yangshengtang123.com/127.0.0.1 -address=/a.yixie8.com/127.0.0.1 -address=/a.yuzhainan.com/127.0.0.1 -address=/a1.0s.net.cn/127.0.0.1 -address=/a1.16700.net/127.0.0.1 -address=/a1.aluntan.com/127.0.0.1 -address=/a1.azg168.cn/127.0.0.1 -address=/a1.chajiaotong.com/127.0.0.1 -address=/a1.firstgw.com/127.0.0.1 -address=/a1.gexing.me/127.0.0.1 -address=/a1.huanqiumil.com/127.0.0.1 -address=/a1.ikafan.com/127.0.0.1 -address=/a1.juzih.com/127.0.0.1 -address=/a1.qqjay.com/127.0.0.1 -address=/a1.sumiaowang.com/127.0.0.1 -address=/a1.vdolady.com/127.0.0.1 -address=/a1.yuuedu.com/127.0.0.1 -address=/a1.zhanzhang.net/127.0.0.1 -address=/aa.gushiwen.org/127.0.0.1 -address=/aa.jiankang.com/127.0.0.1 -address=/aa.xiangxiangmf.com/127.0.0.1 -address=/abc.douguo.com/127.0.0.1 -address=/abc1.yszyz.com/127.0.0.1 -address=/abcj.dooccn.com/127.0.0.1 -address=/abds.pingpingw.com/127.0.0.1 -address=/ac.pingguolv.com/127.0.0.1 -address=/adbd.liuxue86.com/127.0.0.1 -address=/adccoo.cn/127.0.0.1 -address=/adjb.5nd.com/127.0.0.1 -address=/aiwen.cc/127.0.0.1 -address=/al.newxue.com/127.0.0.1 -address=/aoshuku.com/127.0.0.1 -address=/as1.m.hao123.com/127.0.0.1 -address=/as1.wenku.baidu.com/127.0.0.1 -address=/b.diyifanwen.com/127.0.0.1 -address=/b1.51scw.net/127.0.0.1 -address=/b1.91jucai.com/127.0.0.1 -address=/b1.b2b168.com/127.0.0.1 -address=/b1.c1km4.com/127.0.0.1 -address=/b17.shangc.net/127.0.0.1 -address=/baidu-union-js.chuimg.com/127.0.0.1 -address=/baiduada.babihu.com/127.0.0.1 -address=/baidujs.cnys.com/127.0.0.1 -address=/bd.ershenghuo.com/127.0.0.1 -address=/bd.haomagujia.com/127.0.0.1 -address=/bd.wayqq.cn/127.0.0.1 -address=/bd01.daqiso.com/127.0.0.1 -address=/bd1.365qilu.com/127.0.0.1 -address=/bd1.52che.com/127.0.0.1 -address=/bd1.dopa.com/127.0.0.1 -address=/bd1.fengdu100.com/127.0.0.1 -address=/bd1.flfgw.cn/127.0.0.1 -address=/bd1.heiguang.cn/127.0.0.1 -address=/bd1.jobui.com/127.0.0.1 -address=/bd1.nipic.com/127.0.0.1 -address=/bd1.nxing.cn/127.0.0.1 -address=/bd1.szhk.com/127.0.0.1 -address=/bd1.wowoqq.com/127.0.0.1 -address=/bd1.xiangha.com/127.0.0.1 -address=/bd1.xiby.cn/127.0.0.1 -address=/bd1.yidu.cc/127.0.0.1 -address=/bd3.chuiyue.com/127.0.0.1 -address=/bdad.gaotie.net/127.0.0.1 -address=/bdad.hao224.com/127.0.0.1 -address=/bdasd.wmxa.cn/127.0.0.1 -address=/bdcode.35d1.com/127.0.0.1 -address=/bdcode.youke.com/127.0.0.1 -address=/bdcode1.haodou.com/127.0.0.1 -address=/bdcpro.techweb.com.cn/127.0.0.1 -address=/bddm.58news.org/127.0.0.1 -address=/bdfpbimg.ifengimg.com/127.0.0.1 -address=/bdgg.youbian.com/127.0.0.1 -address=/bdjb.gai001.com/127.0.0.1 -address=/bdjj.makepolo.net/127.0.0.1 -address=/bdjs.163lady.com/127.0.0.1 -address=/bdjs.ixiumei.com/127.0.0.1 -address=/bdjs.kaixin100.com/127.0.0.1 -address=/bdjs.ylq.com/127.0.0.1 -address=/bdlm.120askimages.com/127.0.0.1 -address=/bdlmggcs1.familydoctor.com.cn/127.0.0.1 -address=/bdm.911cha.com/127.0.0.1 -address=/bdu1.eol.cn/127.0.0.1 -address=/bdx.playnext.cn/127.0.0.1 -address=/becode.qiushibaike.com/127.0.0.1 -address=/becode.xiao84.com/127.0.0.1 -address=/bjs.9669.cn/127.0.0.1 -address=/bstatic.1kejian.com/127.0.0.1 -address=/bstatic.diyifanwen.com/127.0.0.1 -address=/bu01.zybang.com/127.0.0.1 -address=/bu1.duba.com/127.0.0.1 -address=/bu1.vvvdj.com/127.0.0.1 -address=/c.mnjkw.cn/127.0.0.1 -address=/c.phb123.com/127.0.0.1 -address=/c1.4qx.net/127.0.0.1 -address=/c1.china.cn/127.0.0.1 -address=/c6.friok.com/127.0.0.1 -address=/cby521.cn/127.0.0.1 -address=/cby521.com/127.0.0.1 -address=/ccc.jandan.net/127.0.0.1 -address=/cee1.iteye.com/127.0.0.1 -address=/chicken18.com/127.0.0.1 -address=/chinacsky.com/127.0.0.1 -address=/chuangyixi.com/127.0.0.1 -address=/cj1.256.cc/127.0.0.1 -address=/ckg.vipyl.com/127.0.0.1 -address=/cm.baidu.com/127.0.0.1 -address=/cod.southmoney.com/127.0.0.1 -address=/code1.2chcn.net/127.0.0.1 -address=/cp.greenxf.cn/127.0.0.1 -address=/cpro.zol.com.cn/127.0.0.1 -address=/cpro1.edushi.com/127.0.0.1 -address=/crayon.meishichina.com/127.0.0.1 -address=/d.mingyihui.net/127.0.0.1 -address=/d.tonghua5.com/127.0.0.1 -address=/d.xaoyo.com/127.0.0.1 -address=/d1.zhuangxiu6.com/127.0.0.1 -address=/d6.mobaders.com/127.0.0.1 -address=/daima.23yy.com/127.0.0.1 -address=/daima.cnbanbao.com/127.0.0.1 -address=/daima.diaoben.net/127.0.0.1 -address=/daima.huoche.net/127.0.0.1 -address=/daima.ijq.tv/127.0.0.1 -address=/daima.jiazhao.com/127.0.0.1 -address=/daima.miercn.com/127.0.0.1 -address=/daima.niubb.net/127.0.0.1 -address=/daima.yiyuanyigou8.com/127.0.0.1 -address=/daima.youbian.com/127.0.0.1 -address=/daimaceshi.8809.cn/127.0.0.1 -address=/data.waptime.cn/127.0.0.1 -address=/daxueshengqiandai.com/127.0.0.1 -address=/ddd.jandan.net/127.0.0.1 -address=/df888.eastday.com/127.0.0.1 -address=/dm.388g.cc/127.0.0.1 -address=/dm.51okc.com/127.0.0.1 -address=/dm.66wenshen.com/127.0.0.1 -address=/dm.92to.com/127.0.0.1 -address=/dm.aizhan.com/127.0.0.1 -address=/dm.chalook.net/127.0.0.1 -address=/dm.cqdxun.cn/127.0.0.1 -address=/dm.haojuzi.net/127.0.0.1 -address=/dm.huochepiao.com/127.0.0.1 -address=/dm.jb51.net/127.0.0.1 -address=/dm.jsyst.cn/127.0.0.1 -address=/dm.pw0.cn/127.0.0.1 -address=/dm.riji.cn/127.0.0.1 -address=/dm.sanwen.net/127.0.0.1 -address=/dm.sanwen8.com/127.0.0.1 -address=/dm.sb580.com/127.0.0.1 -address=/dm.wenshenxiu.com/127.0.0.1 -address=/dm.ws8.org/127.0.0.1 -address=/dm.zuowenku.net/127.0.0.1 -address=/dm1.yongkao.com/127.0.0.1 -address=/dm50.jkyd.net/127.0.0.1 -address=/dm53.yxlady.com/127.0.0.1 -address=/dmr.cnhoney.com/127.0.0.1 -address=/dn3.ixinwei.com/127.0.0.1 -address=/dn7788.com/127.0.0.1 -address=/dsxdn.com/127.0.0.1 -address=/du1.bbdj.com/127.0.0.1 -address=/dudm.qingsj.cn/127.0.0.1 -address=/duoyouqu.net/127.0.0.1 -address=/dzais.com/127.0.0.1 -address=/e.qiaoyuwang.com/127.0.0.1 -address=/ee.shixunwang.net/127.0.0.1 -address=/ejunshi.com/127.0.0.1 -address=/ent1.12584.cn/127.0.0.1 -address=/f.520tingshu.com/127.0.0.1 -address=/f1.06ps.com/127.0.0.1 -address=/f1.pig66.com/127.0.0.1 -address=/fan.chazidian.com/127.0.0.1 -address=/fanpingbi1.jlonline.com/127.0.0.1 -address=/fanyi100.com.cn/127.0.0.1 -address=/fbmjc.39yst.com/127.0.0.1 -address=/feidalu.com/127.0.0.1 -address=/ff.guidaye.com/127.0.0.1 -address=/ff.kanguwen.com/127.0.0.1 -address=/firefang.cn/127.0.0.1 -address=/fmgoal.com/127.0.0.1 -address=/fotao9.com/127.0.0.1 -address=/fp.jj59.com/127.0.0.1 -address=/fpb.51edu.com/127.0.0.1 -address=/fpb1.chinacar.asia/127.0.0.1 -address=/g.3lian.com/127.0.0.1 -address=/g.pgu.cc/127.0.0.1 -address=/g1.pptair.com/127.0.0.1 -address=/g1.taijuba.com/127.0.0.1 -address=/gb.it1352.com/127.0.0.1 -address=/gd.jqgc.com/127.0.0.1 -address=/gewuwen.com/127.0.0.1 -address=/gg.egouz.com/127.0.0.1 -address=/gg.huangye88.com/127.0.0.1 -address=/gg.jkmeishi.com/127.0.0.1 -address=/gg1.jc001.cn/127.0.0.1 -address=/gg1.mengchongzu.com/127.0.0.1 -address=/ggdm1.nhaidu.net/127.0.0.1 -address=/godloveme.cn/127.0.0.1 -address=/guang.sdsgwy.com/127.0.0.1 -address=/gzcl999.cn/127.0.0.1 -address=/gzlykj.cn/127.0.0.1 -address=/h1.kukuw.com/127.0.0.1 -address=/h1.tvhome.com/127.0.0.1 -address=/hao.315hyw.com/127.0.0.1 -address=/hao1.loxue.com/127.0.0.1 -address=/hapic1.jhkxwl.com/127.0.0.1 -address=/hccms.com.cn/127.0.0.1 -address=/home520.com/127.0.0.1 -address=/iia1.pikacn.com/127.0.0.1 -address=/img.263y.com/127.0.0.1 -address=/img.xuenb.com/127.0.0.1 -address=/img.zuowen8.com/127.0.0.1 -address=/img1.eywdf.com/127.0.0.1 -address=/img1.ysts8.com/127.0.0.1 -address=/info.meiguoshenpo.com/127.0.0.1 -address=/j.imdb.cn/127.0.0.1 -address=/j1.piaobing.com/127.0.0.1 -address=/jb.dianshu119.com/127.0.0.1 -address=/jb.ecar168.cn/127.0.0.1 -address=/jb.tupianzj.com/127.0.0.1 -address=/jc1.dayfund.cn/127.0.0.1 -address=/jddaw.com/127.0.0.1 -address=/jiaoben.eastday.com/127.0.0.1 -address=/jiaoben.ganji.cn/127.0.0.1 -address=/jiaoben.jucanw.com/127.0.0.1 -address=/jiaoben.junmeng.com/127.0.0.1 -address=/jibn12.jintang114.org/127.0.0.1 -address=/jinghuazhijia.com/127.0.0.1 -address=/jiyan.net/127.0.0.1 -address=/jke1.jianke.com/127.0.0.1 -address=/jnsz.net.cn/127.0.0.1 -address=/js-bd.86huoche.com/127.0.0.1 -address=/js.158pic.com/127.0.0.1 -address=/js.csai.cn/127.0.0.1 -address=/js.hcw888.com/127.0.0.1 -address=/js.ubaike.cn/127.0.0.1 -address=/js1.2abc8.com/127.0.0.1 -address=/js1.xbaixing.com/127.0.0.1 -address=/jsb.qianzhan.com/127.0.0.1 -address=/jsf.cnlinfo.net/127.0.0.1 -address=/jskrnekewe.mofans.net/127.0.0.1 -address=/jsm.39yst.com/127.0.0.1 -address=/jsm.9939.com/127.0.0.1 -address=/ka5188.com/127.0.0.1 -address=/lfyuanai.com/127.0.0.1 -address=/libs.tvmao.cn/127.0.0.1 -address=/linyao.dxsdb.com/127.0.0.1 -address=/lixiangmo.com/127.0.0.1 -address=/ll38.com/127.0.0.1 -address=/lm.dawenxue.org/127.0.0.1 -address=/lraa.xiaoniutui.com/127.0.0.1 -address=/luoshenbest.cn/127.0.0.1 -address=/m1.vodjk.com/127.0.0.1 -address=/ma1.meishij.net/127.0.0.1 -address=/mad1.jirou.com/127.0.0.1 -address=/mbd.weathercn.com/127.0.0.1 -address=/mc.weather.com.cn/127.0.0.1 -address=/milk.7dapei.com/127.0.0.1 -address=/milk.yesky.com.cn/127.0.0.1 -address=/mm.anqu.com/127.0.0.1 -address=/mnkan.com/127.0.0.1 -address=/mo-tuo.com/127.0.0.1 -address=/mountain.zhidao.baidu.com/127.0.0.1 -address=/mpb1.iteye.com/127.0.0.1 -address=/myunion1.qm120.com/127.0.0.1 -address=/namedq.com/127.0.0.1 -address=/newscname1.e23.cn/127.0.0.1 -address=/okkkk.com/127.0.0.1 -address=/one.520319.cn/127.0.0.1 -address=/one.88dus.com/127.0.0.1 -address=/p1.18zhongyao.com/127.0.0.1 -address=/pb.shuxigua.com/127.0.0.1 -address=/pingbi.diudou.com/127.0.0.1 -address=/ppt.tianya999.com/127.0.0.1 -address=/psywed.com/127.0.0.1 -address=/ptw.la/127.0.0.1 -address=/qcjslm.com/127.0.0.1 -address=/qiyeb.iaskbus.com/127.0.0.1 -address=/qooic.com/127.0.0.1 -address=/qq167.com/127.0.0.1 -address=/qqhuhu.com/127.0.0.1 -address=/qqzu.com/127.0.0.1 -address=/qtber2017.2liang.cn/127.0.0.1 -address=/qujishu.com/127.0.0.1 -address=/rbmry.com/127.0.0.1 -address=/rdbd.xsread.com/127.0.0.1 -address=/rmcxw.cn/127.0.0.1 -address=/rmcxw.net/127.0.0.1 -address=/rs1.rensheng5.com/127.0.0.1 -address=/ruan88.com/127.0.0.1 -address=/s.zixuntop.com/127.0.0.1 -address=/s1.86ditu.com/127.0.0.1 -address=/s1.dapenti.com/127.0.0.1 -address=/s1.dugoogle.com/127.0.0.1 -address=/s1.hiapk.com/127.0.0.1 -address=/s1.pc899.com/127.0.0.1 -address=/script-bd.baixing.net/127.0.0.1 -address=/sell1.etlong.com/127.0.0.1 -address=/shili.downxia.com/127.0.0.1 -address=/shili.wanyx.com/127.0.0.1 -address=/shop265.com/127.0.0.1 -address=/show.9zwang.com/127.0.0.1 -address=/sjbaiduadv1.redou.com/127.0.0.1 -address=/sjzqu.com/127.0.0.1 -address=/ss.shicimingju.com/127.0.0.1 -address=/static.365inews.com/127.0.0.1 -address=/static.ichehome.com/127.0.0.1 -address=/t1.612.com/127.0.0.1 -address=/tansuo70.com/127.0.0.1 -address=/thetestpage.39.net/127.0.0.1 -address=/ticcdn.com/127.0.0.1 -address=/tongj.xilu.com/127.0.0.1 -address=/tt123.eastday.com/127.0.0.1 -address=/tui98.cn/127.0.0.1 -address=/ty1.263y.com/127.0.0.1 -address=/u1.shuaiku.com/127.0.0.1 -address=/uc.xiaoxuehelp.com/127.0.0.1 -address=/un1.takefoto.cn/127.0.0.1 -address=/undm.qibulo.com/127.0.0.1 -address=/union1.cnbetacdn.com/127.0.0.1 -address=/uniondm.cz88.net/127.0.0.1 -address=/vi1.souid.com/127.0.0.1 -address=/vvv.ieduw.com/127.0.0.1 -address=/w.xiaopiaoyou.com/127.0.0.1 -address=/w1.diaoyou.com/127.0.0.1 -address=/w11.zhongkaohelp.com/127.0.0.1 -address=/wap001.bytravel.cn/127.0.0.1 -address=/wda.ydt.com.cn/127.0.0.1 -address=/wj.jiancai365.cn/127.0.0.1 -address=/wm.mipcdn.com/127.0.0.1 -address=/wuliao.juqingba.cn/127.0.0.1 -address=/www1.qicheyinyue.wang/127.0.0.1 -address=/xbtw.com/127.0.0.1 -address=/xc.gouchezj.com/127.0.0.1 -address=/xiaopangtao.com/127.0.0.1 -address=/xiaoyutiao.com/127.0.0.1 -address=/xinju.cc/127.0.0.1 -address=/xinkuaiyu.com/127.0.0.1 -address=/xitongku.cc/127.0.0.1 -address=/xmdm.99.com.cn/127.0.0.1 -address=/xne1ocient87zxz.360doc.cn/127.0.0.1 -address=/xttianning.com/127.0.0.1 -address=/xue.zbyw.cn/127.0.0.1 -address=/y.damifan.cn/127.0.0.1 -address=/yhzm.cc/127.0.0.1 -address=/yin1.zgpingshu.com/127.0.0.1 -address=/ykxwn.com/127.0.0.1 -address=/ynzhby.com/127.0.0.1 -address=/ypmeiwen.com/127.0.0.1 -address=/yulzs.com/127.0.0.1 -address=/yx1.managershare.com/127.0.0.1 -address=/yy1.fwccw.com/127.0.0.1 -address=/z1.cyla.cn/127.0.0.1 -address=/z1.icauto.com.cn/127.0.0.1 -address=/z1hihu.xmcimg.com/127.0.0.1 -address=/zg.mmyuer.com/127.0.0.1 -address=/zhaoshang8.com/127.0.0.1 -address=/zhgg.dre8.com/127.0.0.1 -address=/zhifenjie.com/127.0.0.1 -address=/zhihu.xmcimg.com/127.0.0.1 -address=/zhiyuanteam.com/127.0.0.1 -address=/zhongchouyan.com/127.0.0.1 -address=/zk.91post.com/127.0.0.1 -address=/zq84.com/127.0.0.1 -address=/0377shujuhuifu.top/127.0.0.1 -address=/0531mnk.net/127.0.0.1 -address=/2013sh.com/127.0.0.1 -address=/210189.com/127.0.0.1 -address=/258pct.com/127.0.0.1 -address=/258ydh.com/127.0.0.1 -address=/60608787.com/127.0.0.1 -address=/910weixin.com/127.0.0.1 -address=/bjwwfx001.org.cn/127.0.0.1 -address=/bycxsh.com/127.0.0.1 -address=/ccbccb.cn/127.0.0.1 -address=/cdxyb.cn/127.0.0.1 -address=/chinahdcm.com/127.0.0.1 -address=/dupinpu.com/127.0.0.1 -address=/enyayinxiang.com/127.0.0.1 -address=/etg98.com/127.0.0.1 -address=/fate-xy.com/127.0.0.1 -address=/fm6w.com/127.0.0.1 -address=/front99.com/127.0.0.1 -address=/gotourls.bid/127.0.0.1 -address=/guangtui1999.com/127.0.0.1 -address=/h01ce.cn/127.0.0.1 -address=/harbinbaojia.net/127.0.0.1 -address=/hgo7r.cn/127.0.0.1 -address=/hulemedia.com/127.0.0.1 -address=/ip.hivps.xyz/127.0.0.1 -address=/jlhygy.com/127.0.0.1 -address=/juren0.com/127.0.0.1 -address=/kuuad.com/127.0.0.1 -address=/kyad88.com/127.0.0.1 -address=/mengchengbao.com/127.0.0.1 -address=/miaobeichina.com/127.0.0.1 -address=/mightiger.net/127.0.0.1 -address=/mlangw.net/127.0.0.1 -address=/pr33.cn/127.0.0.1 -address=/shanghuitianxia.cn/127.0.0.1 -address=/shongcheng.com/127.0.0.1 -address=/shunlige.com/127.0.0.1 -address=/smsksx.com/127.0.0.1 -address=/soonyou123.com/127.0.0.1 -address=/sssgao999.com/127.0.0.1 -address=/start1999.com/127.0.0.1 -address=/sy123888.com/127.0.0.1 -address=/tdtsd.com/127.0.0.1 -address=/tjshuimu.com/127.0.0.1 -address=/wxktv.cn/127.0.0.1 -address=/xzqxz.net/127.0.0.1 -address=/ydeprint.com/127.0.0.1 -address=/yunpifu.cn/127.0.0.1 -address=/zgdmsj.cn/127.0.0.1 -address=/zhuyuanp.club/127.0.0.1 -address=/zhybw88.com/127.0.0.1 -address=/ggtg8.com/127.0.0.1 -address=/p2.dnvod.tv/127.0.0.1 -address=/p3.dnvod.tv/127.0.0.1 -address=/p4.dnvod.tv/127.0.0.1 -address=/p5.dnvod.tv/127.0.0.1 -address=/p6.dnvod.tv/127.0.0.1 -address=/pub1.dnvod.tv/127.0.0.1 -address=/s1-a1.dnvod.tv/127.0.0.1 -address=/s1-a2.dnvod.tv/127.0.0.1 -address=/s1-a3.dnvod.tv/127.0.0.1 -address=/aa1.ifeng.com/127.0.0.1 -address=/as.g5s.ifeng.com/127.0.0.1 -address=/bb2.ifeng.com/127.0.0.1 -address=/dkg.ifeng.com/127.0.0.1 -address=/cryptaloot.pro/127.0.0.1 -address=/yuyyio.com/127.0.0.1 -address=/03196688.com/127.0.0.1 -address=/24haitao.net/127.0.0.1 -address=/2shoushi.com/127.0.0.1 -address=/365yigou.cn/127.0.0.1 -address=/4z5o27.cn/127.0.0.1 -address=/51gpt.com/127.0.0.1 -address=/52tushuo.com/127.0.0.1 -address=/58scx.com/127.0.0.1 -address=/58xmgys.com/127.0.0.1 -address=/5dydk.com/127.0.0.1 -address=/64si.com/127.0.0.1 -address=/678sky.com/127.0.0.1 -address=/73cm.com/127.0.0.1 -address=/81ngn1.cn/127.0.0.1 -address=/97kuaixiu.com/127.0.0.1 -address=/97paa.com/127.0.0.1 -address=/aa.wenxue6.com/127.0.0.1 -address=/abfirst.cn/127.0.0.1 -address=/actingidekex.cn/127.0.0.1 -address=/admddc.com/127.0.0.1 -address=/aercxy.com/127.0.0.1 -address=/agurl.top/127.0.0.1 -address=/aicydb.com/127.0.0.1 -address=/aikan6.com/127.0.0.1 -address=/aiode.cn/127.0.0.1 -address=/aishowbger.com/127.0.0.1 -address=/anyysz.com/127.0.0.1 -address=/aomde.com/127.0.0.1 -address=/apmengxin.com/127.0.0.1 -address=/apxyz.com/127.0.0.1 -address=/archrug.com/127.0.0.1 -address=/awqsaged.cn/127.0.0.1 -address=/awtks.com/127.0.0.1 -address=/awyys.com/127.0.0.1 -address=/axkxy.com/127.0.0.1 -address=/baiyangzs.com/127.0.0.1 -address=/bapkt.com/127.0.0.1 -address=/barnfps.com/127.0.0.1 -address=/bbvjs.com/127.0.0.1 -address=/beifmu.com/127.0.0.1 -address=/beigedi.com/127.0.0.1 -address=/bentengcn.com/127.0.0.1 -address=/bingdiantao.com/127.0.0.1 -address=/bjbrtc.com/127.0.0.1 -address=/bjeai.com/127.0.0.1 -address=/bjygfd.com/127.0.0.1 -address=/bjzcbx.com/127.0.0.1 -address=/bmgan.com/127.0.0.1 -address=/bokanedu.net/127.0.0.1 -address=/bslmw.com/127.0.0.1 -address=/bueson.com/127.0.0.1 -address=/bvoer.com/127.0.0.1 -address=/bvosv.com/127.0.0.1 -address=/caduka.cn/127.0.0.1 -address=/cailawyer.cn/127.0.0.1 -address=/calculated.cn/127.0.0.1 -address=/car156.net/127.0.0.1 -address=/cchfjz.com/127.0.0.1 -address=/ccmdgg.com/127.0.0.1 -address=/cdfzcz.com/127.0.0.1 -address=/cdgxq.com/127.0.0.1 -address=/cdqjmc.com/127.0.0.1 -address=/cfdanet.com/127.0.0.1 -address=/cgxxmy.com/127.0.0.1 -address=/changhehengqi.com/127.0.0.1 -address=/chersc.com/127.0.0.1 -address=/chexiw.com/127.0.0.1 -address=/chfuw.com/127.0.0.1 -address=/chgdf.cn/127.0.0.1 -address=/cike666.com/127.0.0.1 -address=/cindy17club.com/127.0.0.1 -address=/city009.com/127.0.0.1 -address=/cn-3drp.com/127.0.0.1 -address=/cni58.com/127.0.0.1 -address=/cnzhqs.com/127.0.0.1 -address=/codejumps.com/127.0.0.1 -address=/codlw.com/127.0.0.1 -address=/comesgo.com/127.0.0.1 -address=/continuedsys.cn/127.0.0.1 -address=/coveredsys.cn/127.0.0.1 -address=/cpxkvc.com/127.0.0.1 -address=/cqgya.com/127.0.0.1 -address=/cqhhct.com/127.0.0.1 -address=/cqytjzgc.com/127.0.0.1 -address=/cwpush.com/127.0.0.1 -address=/cxaerp.com/127.0.0.1 -address=/cyto-biotherapy.com/127.0.0.1 -address=/cyylove.com/127.0.0.1 -address=/czlhgz.com/127.0.0.1 -address=/czzdf.com/127.0.0.1 -address=/daishuxy.com/127.0.0.1 -address=/dajean.com/127.0.0.1 -address=/daskm.com/127.0.0.1 -address=/dbwmjj.com/127.0.0.1 -address=/ddanq.com/127.0.0.1 -address=/ddg1277.com/127.0.0.1 -address=/ddhuangchao.com/127.0.0.1 -address=/ddpxhq.cn/127.0.0.1 -address=/dezfu.com/127.0.0.1 -address=/dgxzwj.com/127.0.0.1 -address=/dierqingchun.com/127.0.0.1 -address=/djhbxz.com/127.0.0.1 -address=/dkdlsj.com/127.0.0.1 -address=/dn189.com/127.0.0.1 -address=/dnfeu.com/127.0.0.1 -address=/dsjcfw.com/127.0.0.1 -address=/dtzysm.com/127.0.0.1 -address=/duoyidd.com/127.0.0.1 -address=/dxmci.com/127.0.0.1 -address=/dydyhg.com/127.0.0.1 -address=/dzisou.com/127.0.0.1 -address=/ehxyz.com/127.0.0.1 -address=/emgwq.com/127.0.0.1 -address=/erocw.com/127.0.0.1 -address=/esyzdb.com/127.0.0.1 -address=/fangdalaw.gd.cn/127.0.0.1 -address=/fangzi2.top/127.0.0.1 -address=/fcrdb.com/127.0.0.1 -address=/feifish66.com/127.0.0.1 -address=/ffychb.com/127.0.0.1 -address=/fjxyo.com/127.0.0.1 -address=/fkkse.com/127.0.0.1 -address=/fkogs.com/127.0.0.1 -address=/focuscat.com/127.0.0.1 -address=/fqzds.com/127.0.0.1 -address=/fstaw.com/127.0.0.1 -address=/fszhxd.com/127.0.0.1 -address=/fyjyhm.com/127.0.0.1 -address=/fzdfwy.com/127.0.0.1 -address=/fzxrjx.com/127.0.0.1 -address=/fzyda.com/127.0.0.1 -address=/gadwhy.com/127.0.0.1 -address=/gdhdfs.com/127.0.0.1 -address=/gdsqwy.org/127.0.0.1 -address=/georgias.cn/127.0.0.1 -address=/gnmbd.top/127.0.0.1 -address=/gtiou.com/127.0.0.1 -address=/gtnde.com/127.0.0.1 -address=/gxssjz.com/127.0.0.1 -address=/gyeet.com/127.0.0.1 -address=/gyhzr.com/127.0.0.1 -address=/gyrtg.com/127.0.0.1 -address=/gzmzts.com/127.0.0.1 -address=/gznsyh.com/127.0.0.1 -address=/gzzena.com/127.0.0.1 -address=/hajuwang.cn/127.0.0.1 -address=/hbhxqcw.com/127.0.0.1 -address=/hbnygj.com/127.0.0.1 -address=/hbttcc.com/127.0.0.1 -address=/hbyyzm.com/127.0.0.1 -address=/hdfdm.com/127.0.0.1 -address=/hebzycw.com/127.0.0.1 -address=/heib2.top/127.0.0.1 -address=/hfyxdl.com/127.0.0.1 -address=/hjzndq.com/127.0.0.1 -address=/hk9600.com/127.0.0.1 -address=/hldwmly.com/127.0.0.1 -address=/hmttoly.com/127.0.0.1 -address=/hmyangshengji.com/127.0.0.1 -address=/hnhgw.cn/127.0.0.1 -address=/hongyangbg.com/127.0.0.1 -address=/hqgjcm.com/127.0.0.1 -address=/hqsjc.com/127.0.0.1 -address=/hsbkr.com/127.0.0.1 -address=/htfmbt.com/127.0.0.1 -address=/htjsk.com/127.0.0.1 -address=/huayange.com/127.0.0.1 -address=/huayi65.com/127.0.0.1 -address=/hypzv.com/127.0.0.1 -address=/hzht666.com/127.0.0.1 -address=/hzxfmc.com/127.0.0.1 -address=/hzzfan.com/127.0.0.1 -address=/i-components.net/127.0.0.1 -address=/ia22.com/127.0.0.1 -address=/icyrd.com/127.0.0.1 -address=/identified.cn/127.0.0.1 -address=/ienkdago.cn/127.0.0.1 -address=/iigushi.com/127.0.0.1 -address=/inccnd.com/127.0.0.1 -address=/increased.cn/127.0.0.1 -address=/infvb.com/127.0.0.1 -address=/internerl.com/127.0.0.1 -address=/ishowms.com/127.0.0.1 -address=/jcdb88.com/127.0.0.1 -address=/jcwwxn.com/127.0.0.1 -address=/jdgsgl.com/127.0.0.1 -address=/jgkto.com/127.0.0.1 -address=/jieyixiu.com/127.0.0.1 -address=/jifeidandar.com/127.0.0.1 -address=/jiirz.com/127.0.0.1 -address=/jinchaoyu.com/127.0.0.1 -address=/jingdayiyuan.com/127.0.0.1 -address=/jiyuanzixun.com/127.0.0.1 -address=/jlkja.com/127.0.0.1 -address=/jlxzt.com/127.0.0.1 -address=/jndczg.com/127.0.0.1 -address=/jnsdkjzs.com/127.0.0.1 -address=/jollyspring.com/127.0.0.1 -address=/jrdkc.com/127.0.0.1 -address=/jundazulin.com/127.0.0.1 -address=/juyzr.com/127.0.0.1 -address=/jwiyr.com/127.0.0.1 -address=/jxhcyc.com/127.0.0.1 -address=/jxxcfd.com/127.0.0.1 -address=/jyhwt.cn/127.0.0.1 -address=/kafka8.com/127.0.0.1 -address=/kbstyn.com/127.0.0.1 -address=/kcooy.com/127.0.0.1 -address=/khuoy.com/127.0.0.1 -address=/kjfhe.com/127.0.0.1 -address=/kjhfy.com/127.0.0.1 -address=/ksdsuzhou.com/127.0.0.1 -address=/kteyz.com/127.0.0.1 -address=/ktzte.cn/127.0.0.1 -address=/kwjkd.com/127.0.0.1 -address=/kxhie.com/127.0.0.1 -address=/lanhouhou.cn/127.0.0.1 -address=/laojiayoufang.com/127.0.0.1 -address=/layyi.com/127.0.0.1 -address=/legozu.com/127.0.0.1 -address=/lfdydk.com/127.0.0.1 -address=/lifuzhubao.com/127.0.0.1 -address=/listenother.com/127.0.0.1 -address=/lm.xiashu.la/127.0.0.1 -address=/lqmohun.com/127.0.0.1 -address=/lvyishengtai.com/127.0.0.1 -address=/lybczlsb.com/127.0.0.1 -address=/lyjz001.com/127.0.0.1 -address=/lzida.com/127.0.0.1 -address=/lzjycy.com/127.0.0.1 -address=/lzytt.com/127.0.0.1 -address=/md0z4dh.com/127.0.0.1 -address=/mengpr.com/127.0.0.1 -address=/meooe.com/127.0.0.1 -address=/mgldzcls.com/127.0.0.1 -address=/miaiche.cn/127.0.0.1 -address=/miaos11.com/127.0.0.1 -address=/mid5in.top/127.0.0.1 -address=/miiuv.com/127.0.0.1 -address=/mmhhjt.com/127.0.0.1 -address=/mobiorg8.com/127.0.0.1 -address=/morningpiggy.com/127.0.0.1 -address=/mubite.cn/127.0.0.1 -address=/myycrw.com/127.0.0.1 -address=/nduop.com/127.0.0.1 -address=/nernv.com/127.0.0.1 -address=/netko0o.com/127.0.0.1 -address=/nfkos.com/127.0.0.1 -address=/ningbojipiao.com/127.0.0.1 -address=/niudashu.com/127.0.0.1 -address=/nixiclothing.com/127.0.0.1 -address=/njxczy.com/127.0.0.1 -address=/nmtouzi.com/127.0.0.1 -address=/nnfiy.com/127.0.0.1 -address=/ntpddq.com/127.0.0.1 -address=/nwwap.com/127.0.0.1 -address=/nwxzs.com/127.0.0.1 -address=/nxypz.com/127.0.0.1 -address=/nyhnx.com/127.0.0.1 -address=/nykps.com/127.0.0.1 -address=/oomyv.com/127.0.0.1 -address=/opqsr.com/127.0.0.1 -address=/osaws.com/127.0.0.1 -address=/osndy.com/127.0.0.1 -address=/paochala.net/127.0.0.1 -address=/passwz.com/127.0.0.1 -address=/pdfbs.com/127.0.0.1 -address=/pdkuai.com/127.0.0.1 -address=/petsheying.com/127.0.0.1 -address=/piaogj.com/127.0.0.1 -address=/picbr.com/127.0.0.1 -address=/piliangzhuce.cn/127.0.0.1 -address=/pjbjzf.com/127.0.0.1 -address=/plerv.com/127.0.0.1 -address=/pomhz.com/127.0.0.1 -address=/pptte.com/127.0.0.1 -address=/prazpf.cn/127.0.0.1 -address=/pyerc.com/127.0.0.1 -address=/qaqact.cn/127.0.0.1 -address=/qhdop.com/127.0.0.1 -address=/qinchugudao.com/127.0.0.1 -address=/qingzhencai.net/127.0.0.1 -address=/qkptx.com/127.0.0.1 -address=/qloer.com/127.0.0.1 -address=/qlonglong.com/127.0.0.1 -address=/qsove.com/127.0.0.1 -address=/quldu.com/127.0.0.1 -address=/qzdag.com/127.0.0.1 -address=/qzdaren.com/127.0.0.1 -address=/raeqqe.cn/127.0.0.1 -address=/rbywg.com/127.0.0.1 -address=/represented.cn/127.0.0.1 -address=/requested.cn/127.0.0.1 -address=/rfese.com/127.0.0.1 -address=/ricqo.com/127.0.0.1 -address=/romgv.com/127.0.0.1 -address=/ruyidk.com/127.0.0.1 -address=/sanitwealth.com/127.0.0.1 -address=/sceyv.com/127.0.0.1 -address=/sczhilong.cn/127.0.0.1 -address=/sdkdm.com/127.0.0.1 -address=/sdsqyyc.com/127.0.0.1 -address=/sdytsh.com/127.0.0.1 -address=/sezvc.com/127.0.0.1 -address=/sgzs999.com/127.0.0.1 -address=/shenyunkeji.com/127.0.0.1 -address=/sjczsc.com/127.0.0.1 -address=/slvtx.com/127.0.0.1 -address=/smxay.com/127.0.0.1 -address=/sonomoyo.com/127.0.0.1 -address=/sqwscy.com/127.0.0.1 -address=/srrux.com/127.0.0.1 -address=/statstat888.com/127.0.0.1 -address=/suoooi.cn/127.0.0.1 -address=/suwo0n.com/127.0.0.1 -address=/sxjkc.cn/127.0.0.1 -address=/sxjxhg.com/127.0.0.1 -address=/sxmdxy.com/127.0.0.1 -address=/sxxca.com/127.0.0.1 -address=/sxzzhj.com/127.0.0.1 -address=/sycbbs.com/127.0.0.1 -address=/symaa.cn/127.0.0.1 -address=/symab.cn/127.0.0.1 -address=/symad.cn/127.0.0.1 -address=/symae.cn/127.0.0.1 -address=/symag.cn/127.0.0.1 -address=/symah.cn/127.0.0.1 -address=/sysadult.cn/127.0.0.1 -address=/sysal.cn/127.0.0.1 -address=/sytsr.com/127.0.0.1 -address=/szqifu.com/127.0.0.1 -address=/szshouzhai.com/127.0.0.1 -address=/tabwl.com/127.0.0.1 -address=/tajxgs.com/127.0.0.1 -address=/tcnmf.com/127.0.0.1 -address=/tiankongzudui.com/127.0.0.1 -address=/tianxiazhenji.com/127.0.0.1 -address=/tiaopimiao.net/127.0.0.1 -address=/tick0.com/127.0.0.1 -address=/tiwom.com/127.0.0.1 -address=/tongjiwo.com/127.0.0.1 -address=/travlcen.com/127.0.0.1 -address=/tsrc8.com/127.0.0.1 -address=/tuadong.com/127.0.0.1 -address=/tukexiu.com/127.0.0.1 -address=/txtxr.com/127.0.0.1 -address=/umyai.com/127.0.0.1 -address=/uuopp.com/127.0.0.1 -address=/vers80.com/127.0.0.1 -address=/vichc.com/127.0.0.1 -address=/viiqx.com/127.0.0.1 -address=/vsxet.com/127.0.0.1 -address=/vvnna.com/127.0.0.1 -address=/wanfcc.com/127.0.0.1 -address=/wao24.com/127.0.0.1 -address=/webkooo.com/127.0.0.1 -address=/weboser.com/127.0.0.1 -address=/wervp.com/127.0.0.1 -address=/wfyqc.com/127.0.0.1 -address=/wghjq.cn/127.0.0.1 -address=/wjdfv.com/127.0.0.1 -address=/wl963.com/127.0.0.1 -address=/wnbfw.com/127.0.0.1 -address=/wo-x.cn/127.0.0.1 -address=/wokekk.com/127.0.0.1 -address=/workbizs.com/127.0.0.1 -address=/wsxxu.com/127.0.0.1 -address=/wvver.com/127.0.0.1 -address=/wxhdwy.com/127.0.0.1 -address=/wxhh678.com/127.0.0.1 -address=/wxmg2016.com/127.0.0.1 -address=/xabtx.com/127.0.0.1 -address=/xacqp.com/127.0.0.1 -address=/xavingtsun.com/127.0.0.1 -address=/xberu.com/127.0.0.1 -address=/xcbmwx.com/127.0.0.1 -address=/xcdzsw.com/127.0.0.1 -address=/xdyszx.com/127.0.0.1 -address=/xiangchim0.com/127.0.0.1 -address=/xiangshiw.net/127.0.0.1 -address=/xinghao89.com/127.0.0.1 -address=/xjtxcj.com/127.0.0.1 -address=/xkanf.com/127.0.0.1 -address=/xkqpco.com/127.0.0.1 -address=/xmcxz.com/127.0.0.1 -address=/xmgysweb.com/127.0.0.1 -address=/xnjzsn.com/127.0.0.1 -address=/xrain.net/127.0.0.1 -address=/xtzxmy.com/127.0.0.1 -address=/xujx8.com/127.0.0.1 -address=/xztms.com/127.0.0.1 -address=/y12f.com/127.0.0.1 -address=/ybhypt.com/127.0.0.1 -address=/ybtianxi.com/127.0.0.1 -address=/yexfes.com/127.0.0.1 -address=/ygqczh.com/127.0.0.1 -address=/yicang8.com/127.0.0.1 -address=/yijieweizf.com/127.0.0.1 -address=/yinzantouzi.com/127.0.0.1 -address=/yisloda.com/127.0.0.1 -address=/ynbzxh.com/127.0.0.1 -address=/ynjczy.net/127.0.0.1 -address=/ynjyhm.com/127.0.0.1 -address=/youweiprint.com/127.0.0.1 -address=/ytbnm.cn/127.0.0.1 -address=/ytdksb.com/127.0.0.1 -address=/yueyelive.com/127.0.0.1 -address=/yunanfuwuqi.com/127.0.0.1 -address=/yunxiufang.net/127.0.0.1 -address=/yuxiny.com/127.0.0.1 -address=/yuxyz.com/127.0.0.1 -address=/ywbwsm.com/127.0.0.1 -address=/yxhxs.com/127.0.0.1 -address=/yyeks.com/127.0.0.1 -address=/yyhqch.com/127.0.0.1 -address=/zabxb.com/127.0.0.1 -address=/zcdor.com/127.0.0.1 -address=/zenwq.com/127.0.0.1 -address=/zfood029.com/127.0.0.1 -address=/zgbsny.com/127.0.0.1 -address=/zgclmw.cn/127.0.0.1 -address=/zgfszs.com/127.0.0.1 -address=/zgjjkk.com/127.0.0.1 -address=/zgjkv.com/127.0.0.1 -address=/zgsxhx.com/127.0.0.1 -address=/zhfyws.com/127.0.0.1 -address=/zhiyaowan.cn/127.0.0.1 -address=/zhuyuanp.shop/127.0.0.1 -address=/zhuyuanp.top/127.0.0.1 -address=/zizcy.com/127.0.0.1 -address=/zjkdaikuan.com/127.0.0.1 -address=/zjuwjdc.com/127.0.0.1 -address=/zmyuer.com/127.0.0.1 -address=/zpoder.com/127.0.0.1 -address=/zreder.com/127.0.0.1 -address=/zstjy.com/127.0.0.1 -address=/zsxpx.com/127.0.0.1 -address=/ztxbd.com/127.0.0.1 -address=/zwkssb.com/127.0.0.1 -address=/zx-jsp.com/127.0.0.1 -address=/zxhymh.com/127.0.0.1 -address=/zxjjzx.com/127.0.0.1 -address=/zywhjd.com/127.0.0.1 -address=/zzhszj.com/127.0.0.1 -address=/zzmmkj.com/127.0.0.1 -address=/zzsdjq.com/127.0.0.1 -address=/zzsno1.com/127.0.0.1 -address=/corechina.net/127.0.0.1 -address=/diogv.com/127.0.0.1 -address=/iierq.com/127.0.0.1 -address=/jbflil.cn/127.0.0.1 -address=/shyanche.net/127.0.0.1 -address=/yljiaoluo.com/127.0.0.1 -address=/yqjxzw.com/127.0.0.1 -address=/69lm.com.cn/127.0.0.1 -address=/qhdfxkj.com/127.0.0.1 -address=/shxqeps.com/127.0.0.1 -address=/hnpjshop.com/127.0.0.1 -address=/lopostone.com/127.0.0.1 -address=/qyqc4s.com/127.0.0.1 -address=/vuahb.com/127.0.0.1 -address=/146.148.85.61/127.0.0.1 -address=/hdapp1003-a.akamaihd.net/127.0.0.1 -address=/hdapp1008-a.akamaihd.net/127.0.0.1 -address=/hdsrc-a.akamaihd.net/127.0.0.1 -address=/qhdbfjx.com/127.0.0.1 -address=/sohu999.com/127.0.0.1 -address=/46.165.197.153/127.0.0.1 -address=/46.165.197.231/127.0.0.1 -address=/74.117.182.77/127.0.0.1 -address=/78.140.131.214/127.0.0.1 -address=/clkrev.com/127.0.0.1 -address=/wsp.mgid.com/127.0.0.1 -address=/acrabakasaka.com/127.0.0.1 -address=/ajkelra.com/127.0.0.1 -address=/akailoparzapi.com/127.0.0.1 -address=/akrazappi.com/127.0.0.1 -address=/alabardak.com/127.0.0.1 -address=/albertonne.com/127.0.0.1 -address=/arganostrella.com/127.0.0.1 -address=/atarshaboor.com/127.0.0.1 -address=/avalhukof.com/127.0.0.1 -address=/badokal.com/127.0.0.1 -address=/bahaimlo.com/127.0.0.1 -address=/banomago.com/127.0.0.1 -address=/bapalolo.com/127.0.0.1 -address=/bapaquac.com/127.0.0.1 -address=/beglorena.com/127.0.0.1 -address=/bidoraln.com/127.0.0.1 -address=/bobarilla.com/127.0.0.1 -address=/boerilav.com/127.0.0.1 -address=/bokilora.com/127.0.0.1 -address=/bolkazoopa.com/127.0.0.1 -address=/bondinra.com/127.0.0.1 -address=/bonjikoa.com/127.0.0.1 -address=/botiviga.com/127.0.0.1 -address=/bulbazoa.com/127.0.0.1 -address=/camtinolc.com/127.0.0.1 -address=/carutinv.com/127.0.0.1 -address=/chukalapopi.com/127.0.0.1 -address=/chukalorqa.com/127.0.0.1 -address=/ciridola.com/127.0.0.1 -address=/civitik.com/127.0.0.1 -address=/dagasaka.com/127.0.0.1 -address=/daghashmal.com/127.0.0.1 -address=/dbvault.net/127.0.0.1 -address=/dodatova.com/127.0.0.1 -address=/dokaboka.com/127.0.0.1 -address=/dontibar.com/127.0.0.1 -address=/dorapodorasham.com/127.0.0.1 -address=/dragolosa.com/127.0.0.1 -address=/drogomet.com/127.0.0.1 -address=/dulderbulder.com/127.0.0.1 -address=/durazopa.com/127.0.0.1 -address=/egolina.com/127.0.0.1 -address=/ekolamis.com/127.0.0.1 -address=/erogaliv.com/127.0.0.1 -address=/farfarida.com/127.0.0.1 -address=/filtonay.com/127.0.0.1 -address=/foditgoz.com/127.0.0.1 -address=/forkitz.com/127.0.0.1 -address=/forkmola.com/127.0.0.1 -address=/fulhudhoo.com/127.0.0.1 -address=/gamzetov.com/127.0.0.1 -address=/godibarl.com/127.0.0.1 -address=/golizoli.com/127.0.0.1 -address=/golokavi.com/127.0.0.1 -address=/haklopar.com/127.0.0.1 -address=/hariqavi.com/127.0.0.1 -address=/hirovivi.com/127.0.0.1 -address=/horheloopo.com/127.0.0.1 -address=/humuseliyahu.com/127.0.0.1 -address=/jadizayo.com/127.0.0.1 -address=/jandolav.com/127.0.0.1 -address=/jerotidv.com/127.0.0.1 -address=/jingavot.com/127.0.0.1 -address=/jojilabola.com/127.0.0.1 -address=/joribobo.com/127.0.0.1 -address=/jorjodika.com/127.0.0.1 -address=/jquerycdn.co.il/127.0.0.1 -address=/jquerymin.co.il/127.0.0.1 -address=/kaidop.com/127.0.0.1 -address=/kalmloda.com/127.0.0.1 -address=/kdoraraq.com/127.0.0.1 -address=/kilomansa.com/127.0.0.1 -address=/kilorama.com/127.0.0.1 -address=/kirilaboola.com/127.0.0.1 -address=/kokilopi.com/127.0.0.1 -address=/kolimanq.com/127.0.0.1 -address=/koltruah.com/127.0.0.1 -address=/kompilukabalazooka.com/127.0.0.1 -address=/korketople.com/127.0.0.1 -address=/korkilazoopi.com/127.0.0.1 -address=/krakeshlaja.com/127.0.0.1 -address=/kuchebraska.com/127.0.0.1 -address=/kulkaridoopi.com/127.0.0.1 -address=/kulkerbolda.com/127.0.0.1 -address=/kulkulta.com/127.0.0.1 -address=/kullalabulla.com/127.0.0.1 -address=/kurlikburlik.com/127.0.0.1 -address=/kuzalooza.com/127.0.0.1 -address=/liktirov.com/127.0.0.1 -address=/lokipodi.com/127.0.0.1 -address=/lokspeedarma.com/127.0.0.1 -address=/majosita.com/127.0.0.1 -address=/maokdata.com/127.0.0.1 -address=/measurementaz.com/127.0.0.1 -address=/megahrepsh.com/127.0.0.1 -address=/melahorgani.com/127.0.0.1 -address=/milparota.com/127.0.0.1 -address=/mitotach.com/127.0.0.1 -address=/mojigaga.com/127.0.0.1 -address=/monijorb.com/127.0.0.1 -address=/moninosa.com/127.0.0.1 -address=/morbitempus.com/127.0.0.1 -address=/moritava.com/127.0.0.1 -address=/mozefakt.com/127.0.0.1 -address=/mujilora.com/127.0.0.1 -address=/muligov.com/127.0.0.1 -address=/namitol.com/127.0.0.1 -address=/nanuyalailai.com/127.0.0.1 -address=/nepohita.com/127.0.0.1 -address=/nidorivo.com/127.0.0.1 -address=/niholaev.com/127.0.0.1 -address=/niklesrov.com/127.0.0.1 -address=/nimdinb.com/127.0.0.1 -address=/nitigoly.com/127.0.0.1 -address=/oddomane.com/127.0.0.1 -address=/opaalopaa.com/127.0.0.1 -address=/opjalajamak.com/127.0.0.1 -address=/paholita.com/127.0.0.1 -address=/perahbashmama.com/127.0.0.1 -address=/pipilazipi.com/127.0.0.1 -address=/pipilida.com/127.0.0.1 -address=/pitatagata.com/127.0.0.1 -address=/pompazilla.com/127.0.0.1 -address=/poratav.com/127.0.0.1 -address=/prikolizdesa.com/127.0.0.1 -address=/pukrazopchatka.com/127.0.0.1 -address=/pypozeqi.com/127.0.0.1 -address=/qaquzakalaka.com/127.0.0.1 -address=/qawiman.com/127.0.0.1 -address=/quavomi.com/127.0.0.1 -address=/rapigoy.com/127.0.0.1 -address=/rapizoda.com/127.0.0.1 -address=/ratkalol.com/127.0.0.1 -address=/reqpostanza.com/127.0.0.1 -address=/rezilopompa.com/127.0.0.1 -address=/ripalazc.com/127.0.0.1 -address=/rodirola.com/127.0.0.1 -address=/rolkakuksa.com/127.0.0.1 -address=/roritabo.com/127.0.0.1 -address=/rotibald.com/127.0.0.1 -address=/scrappykoko.com/127.0.0.1 -address=/senolati.com/127.0.0.1 -address=/shmonekisot.com/127.0.0.1 -address=/shokala.com/127.0.0.1 -address=/shoxyloxi.com/127.0.0.1 -address=/shulhanafuh.com/127.0.0.1 -address=/tantella.com/127.0.0.1 -address=/tenlokif.com/127.0.0.1 -address=/tijorari.com/127.0.0.1 -address=/tikodala.com/127.0.0.1 -address=/tikrailijorj.com/127.0.0.1 -address=/tilosman.com/127.0.0.1 -address=/tokaripupsi.com/127.0.0.1 -address=/tollibolli.com/127.0.0.1 -address=/totachrl.com/127.0.0.1 -address=/trasholita.com/127.0.0.1 -address=/trikroacha.com/127.0.0.1 -address=/udorik.com/127.0.0.1 -address=/ufraton.com/127.0.0.1 -address=/ukatoe.com/127.0.0.1 -address=/ulajilala.com/127.0.0.1 -address=/unidati.com/127.0.0.1 -address=/upnorma.com/127.0.0.1 -address=/uralap.com/127.0.0.1 -address=/utazwa.com/127.0.0.1 -address=/utorido.com/127.0.0.1 -address=/uzekrs.com/127.0.0.1 -address=/uzotarak.com/127.0.0.1 -address=/venonita.com/127.0.0.1 -address=/vkafirac.com/127.0.0.1 -address=/volimole.com/127.0.0.1 -address=/wakapita.com/127.0.0.1 -address=/wodipaca.com/127.0.0.1 -address=/wodizapt.com/127.0.0.1 -address=/xeozir.com/127.0.0.1 -address=/yaboshadi.com/127.0.0.1 -address=/yallboen.com/127.0.0.1 -address=/yeshhaod.com/127.0.0.1 -address=/yorilada.com/127.0.0.1 -address=/yuituityula.com/127.0.0.1 -address=/zarazazapolaza.com/127.0.0.1 -address=/zepozipo.com/127.0.0.1 -address=/zilzolachi.com/127.0.0.1 -address=/zinovila.com/127.0.0.1 -address=/zipovoma.com/127.0.0.1 -address=/zirobata.com/127.0.0.1 -address=/zogzogolla.com/127.0.0.1 -address=/zonolali.com/127.0.0.1 -address=/zorbikala.com/127.0.0.1 -address=/zortinah.com/127.0.0.1 -address=/zozolilla.com/127.0.0.1 -address=/zukabota.com/127.0.0.1 -address=/abbp1.science./127.0.0.1 -address=/abbp1.space./127.0.0.1 -address=/abbp1.website./127.0.0.1 -address=/adspayformymortgage.win./127.0.0.1 -address=/poolnoodle.tech./127.0.0.1 -address=/a.livesportmedia.eu/127.0.0.1 -address=/a.ucoz.net/127.0.0.1 -address=/a.watershed-publishing.com/127.0.0.1 -address=/a04296f070c0146f314d-0dcad72565cb350972beb3666a86f246.r50.cf5.rackcdn.com/127.0.0.1 -address=/ad.about.co.kr/127.0.0.1 -address=/ad.accessmediaproductions.com/127.0.0.1 -address=/ad.bitmedia.io/127.0.0.1 -address=/ad.flux.com/127.0.0.1 -address=/ad.foxnetworks.com/127.0.0.1 -address=/ad.icasthq.com/127.0.0.1 -address=/ad.idgtn.net/127.0.0.1 -address=/ad.jamba.net/127.0.0.1 -address=/ad.livere.co.kr/127.0.0.1 -address=/ad.mail.ru/127.0.0.1 -address=/ad.mediabong.net/127.0.0.1 -address=/ad.mesomorphosis.com/127.0.0.1 -address=/ad.openmultimedia.biz/127.0.0.1 -address=/ad.outsidehub.com/127.0.0.1 -address=/ad.pickple.net/127.0.0.1 -address=/ad.proxy.sh/127.0.0.1 -address=/ad.r.worldssl.net/127.0.0.1 -address=/ad.rambler.ru/127.0.0.1 -address=/ad.reklamport.com/127.0.0.1 -address=/ad.sensismediasmart.com.au/127.0.0.1 -address=/ad.smartclip.net/127.0.0.1 -address=/ad.spielothek.so/127.0.0.1 -address=/ad.vidaroo.com/127.0.0.1 -address=/ad.winningpartner.com/127.0.0.1 -address=/add.bugun.com.tr/127.0.0.1 -address=/adingo.jp.eimg.jp/127.0.0.1 -address=/adn.ebay.com/127.0.0.1 -address=/adplus.goo.mx/127.0.0.1 -address=/ads.mp.mydas.mobi/127.0.0.1 -address=/ads.tremorhub.com/127.0.0.1 -address=/adscaspion.appspot.com/127.0.0.1 -address=/adss.dotdo.net/127.0.0.1 -address=/adz.zwee.ly/127.0.0.1 -address=/aff.eteachergroup.com/127.0.0.1 -address=/aff.marathonbet.com/127.0.0.1 -address=/aff.svjump.com/127.0.0.1 -address=/affil.mupromo.com/127.0.0.1 -address=/affiliateprogram.keywordspy.com/127.0.0.1 -address=/affiliates.allposters.com/127.0.0.1 -address=/affiliatesmedia.sbobet.com/127.0.0.1 -address=/affiliation.fotovista.com/127.0.0.1 -address=/affiliationjs.s3.amazonaws.com/127.0.0.1 -address=/agenda.complex.com/127.0.0.1 -address=/airpushmarketing.s3.amazonaws.com/127.0.0.1 -address=/ais.abacast.com/127.0.0.1 -address=/analytics.disneyinternational.com/127.0.0.1 -address=/appnext-a.akamaihd.net/127.0.0.1 -address=/ard.ihookup.com/127.0.0.1 -address=/award.sitekeuring.net/127.0.0.1 -address=/b.babylon.com/127.0.0.1 -address=/b.livesport.eu/127.0.0.1 -address=/b92.putniktravel.com/127.0.0.1 -address=/banner.101xp.com/127.0.0.1 -address=/banner.3ddownloads.com/127.0.0.1 -address=/banner.europacasino.com/127.0.0.1 -address=/banner.telefragged.com/127.0.0.1 -address=/banner.titancasino.com/127.0.0.1 -address=/bl.wavecdn.de/127.0.0.1 -address=/blamads-assets.s3.amazonaws.com/127.0.0.1 -address=/bluhostedbanners.blucigs.com/127.0.0.1 -address=/box.anchorfree.net/127.0.0.1 -address=/btr.domywife.com/127.0.0.1 -address=/c.netu.tv/127.0.0.1 -address=/cas.clickability.com/127.0.0.1 -address=/cash.neweramediaworks.com/127.0.0.1 -address=/cerebral.typn.com/127.0.0.1 -address=/cjmooter.xcache.kinxcdn.com/127.0.0.1 -address=/clarity.abacast.com/127.0.0.1 -address=/click.eyk.net/127.0.0.1 -address=/clickstrip.6wav.es/127.0.0.1 -address=/connect.summit.co.uk/127.0.0.1 -address=/content.livesportmedia.eu/127.0.0.1 -address=/cpm.amateurcommunity.de/127.0.0.1 -address=/creatives.inmotionhosting.com/127.0.0.1 -address=/creatives.summitconnect.co.uk/127.0.0.1 -address=/ct.verticalhealth.net/127.0.0.1 -address=/d13czkep7ax7nj.cloudfront.net/127.0.0.1 -address=/d140sbu1b1m3h0.cloudfront.net/127.0.0.1 -address=/d15565yqt7pv7r.cloudfront.net/127.0.0.1 -address=/d15gt9gwxw5wu0.cloudfront.net/127.0.0.1 -address=/d1635hfcvs8ero.cloudfront.net/127.0.0.1 -address=/d17f2fxw547952.cloudfront.net/127.0.0.1 -address=/d19972r8wdpby8.cloudfront.net/127.0.0.1 -address=/d1ade4ciw4bqyc.cloudfront.net/127.0.0.1 -address=/d1aezk8tun0dhm.cloudfront.net/127.0.0.1 -address=/d1ar5xirbydtuc.cloudfront.net/127.0.0.1 -address=/d1cl1sqtf3o420.cloudfront.net/127.0.0.1 -address=/d1d43ayl08oaq2.cloudfront.net/127.0.0.1 -address=/d1d95giojjkirt.cloudfront.net/127.0.0.1 -address=/d1ebha2k07asm5.cloudfront.net/127.0.0.1 -address=/d1ep3cn6qx0l3z.cloudfront.net/127.0.0.1 -address=/d1ey3fksimezm4.cloudfront.net/127.0.0.1 -address=/d1fo96xm8fci0r.cloudfront.net/127.0.0.1 -address=/d1gojtoka5qi10.cloudfront.net/127.0.0.1 -address=/d1grtyyel8f1mh.cloudfront.net/127.0.0.1 -address=/d1gyluhoxet66h.cloudfront.net/127.0.0.1 -address=/d1i9kr6k34lyp.cloudfront.net/127.0.0.1 -address=/d1k74lgicilrr3.cloudfront.net/127.0.0.1 -address=/d1mbgf0ge24riu.cloudfront.net/127.0.0.1 -address=/d1nmxiiewlx627.cloudfront.net/127.0.0.1 -address=/d1noellhv8fksc.cloudfront.net/127.0.0.1 -address=/d1pcttwib15k25.cloudfront.net/127.0.0.1 -address=/d1pdpbxj733bb1.cloudfront.net/127.0.0.1 -address=/d1qk9ujrmkucbl.cloudfront.net/127.0.0.1 -address=/d1rguclfwp7nc8.cloudfront.net/127.0.0.1 -address=/d1spb7fplenrp4.cloudfront.net/127.0.0.1 -address=/d1vbm0eveofcle.cloudfront.net/127.0.0.1 -address=/d1zgderxoe1a.cloudfront.net/127.0.0.1 -address=/d21j20wsoewvjq.cloudfront.net/127.0.0.1 -address=/d22lo5bcpq2fif.cloudfront.net/127.0.0.1 -address=/d23guct4biwna6.cloudfront.net/127.0.0.1 -address=/d23nyyb6dc29z6.cloudfront.net/127.0.0.1 -address=/d258j801nsw1p7.cloudfront.net/127.0.0.1 -address=/d25ruj6ht8bs1.cloudfront.net/127.0.0.1 -address=/d25xkbr68qqtcn.cloudfront.net/127.0.0.1 -address=/d26dzd2k67we08.cloudfront.net/127.0.0.1 -address=/d26j9bp9bq4uhd.cloudfront.net/127.0.0.1 -address=/d26wy0pxd3qqpv.cloudfront.net/127.0.0.1 -address=/d27jt7xr4fq3e8.cloudfront.net/127.0.0.1 -address=/d287x05ve9a63s.cloudfront.net/127.0.0.1 -address=/d29r6igjpnoykg.cloudfront.net/127.0.0.1 -address=/d2anfhdgjxf8s1.cloudfront.net/127.0.0.1 -address=/d2b2x1ywompm1b.cloudfront.net/127.0.0.1 -address=/d2b560qq58menv.cloudfront.net/127.0.0.1 -address=/d2b65ihpmocv7w.cloudfront.net/127.0.0.1 -address=/d2bgg7rjywcwsy.cloudfront.net/127.0.0.1 -address=/d2cgumzzqhgmdu.cloudfront.net/127.0.0.1 -address=/d2cxkkxhecdzsq.cloudfront.net/127.0.0.1 -address=/d2d2lbvq8xirbs.cloudfront.net/127.0.0.1 -address=/d2dxgm96wvaa5j.cloudfront.net/127.0.0.1 -address=/d2focgxak1cn74.cloudfront.net/127.0.0.1 -address=/d2ghscazvn398x.cloudfront.net/127.0.0.1 -address=/d2gpgaupalra1d.cloudfront.net/127.0.0.1 -address=/d2gtlljtkeiyzd.cloudfront.net/127.0.0.1 -address=/d2gz6iop9uxobu.cloudfront.net/127.0.0.1 -address=/d2hap2bsh1k9lw.cloudfront.net/127.0.0.1 -address=/d2hcjk8asp3td7.cloudfront.net/127.0.0.1 -address=/d2ipklohrie3lo.cloudfront.net/127.0.0.1 -address=/d2mic0r0bo3i6z.cloudfront.net/127.0.0.1 -address=/d2mq0uzafv8ytp.cloudfront.net/127.0.0.1 -address=/d2muzdhs7lpmo0.cloudfront.net/127.0.0.1 -address=/d2nlytvx51ywh9.cloudfront.net/127.0.0.1 -address=/d2nz8k4xyoudsx.cloudfront.net/127.0.0.1 -address=/d2o307dm5mqftz.cloudfront.net/127.0.0.1 -address=/d2oallm7wrqvmi.cloudfront.net/127.0.0.1 -address=/d2omcicc3a4zlg.cloudfront.net/127.0.0.1 -address=/d2pgy8h4i30on1.cloudfront.net/127.0.0.1 -address=/d2plxos94peuwp.cloudfront.net/127.0.0.1 -address=/d2pxbld8wrqyrk.cloudfront.net/127.0.0.1 -address=/d2qz7ofajpstv5.cloudfront.net/127.0.0.1 -address=/d2r359adnh3sfn.cloudfront.net/127.0.0.1 -address=/d2s64zaa9ua7uv.cloudfront.net/127.0.0.1 -address=/d2szg1g41jt3pq.cloudfront.net/127.0.0.1 -address=/d2tgev5wuprbqq.cloudfront.net/127.0.0.1 -address=/d2tnimpzlb191i.cloudfront.net/127.0.0.1 -address=/d2ubicnllnnszy.cloudfront.net/127.0.0.1 -address=/d2ue9k1rhsumed.cloudfront.net/127.0.0.1 -address=/d2v4glj2m8yzg5.cloudfront.net/127.0.0.1 -address=/d2v9ajh2eysdau.cloudfront.net/127.0.0.1 -address=/d2vt6q0n0iy66w.cloudfront.net/127.0.0.1 -address=/d2yhukq7vldf1u.cloudfront.net/127.0.0.1 -address=/d2z1smm3i01tnr.cloudfront.net/127.0.0.1 -address=/d31807xkria1x4.cloudfront.net/127.0.0.1 -address=/d32pxqbknuxsuy.cloudfront.net/127.0.0.1 -address=/d33f10u0pfpplc.cloudfront.net/127.0.0.1 -address=/d33otidwg56k90.cloudfront.net/127.0.0.1 -address=/d34obr29voew8l.cloudfront.net/127.0.0.1 -address=/d34rdvn2ky3gnm.cloudfront.net/127.0.0.1 -address=/d37kzqe5knnh6t.cloudfront.net/127.0.0.1 -address=/d38pxm3dmrdu6d.cloudfront.net/127.0.0.1 -address=/d38r21vtgndgb1.cloudfront.net/127.0.0.1 -address=/d39xqloz8t5a6x.cloudfront.net/127.0.0.1 -address=/d3ahinqqx1dy5v.cloudfront.net/127.0.0.1 -address=/d3al52d8cojds7.cloudfront.net/127.0.0.1 -address=/d3bvcf24wln03d.cloudfront.net/127.0.0.1 -address=/d3dphmosjk9rot.cloudfront.net/127.0.0.1 -address=/d3dytsf4vrjn5x.cloudfront.net/127.0.0.1 -address=/d3f9mcik999dte.cloudfront.net/127.0.0.1 -address=/d3fzrm6pcer44x.cloudfront.net/127.0.0.1 -address=/d3irruagotonpp.cloudfront.net/127.0.0.1 -address=/d3iwjrnl4m67rd.cloudfront.net/127.0.0.1 -address=/d3lc9zmxv46zr.cloudfront.net/127.0.0.1 -address=/d3lvr7yuk4uaui.cloudfront.net/127.0.0.1 -address=/d3lzezfa753mqu.cloudfront.net/127.0.0.1 -address=/d3m41swuqq4sv5.cloudfront.net/127.0.0.1 -address=/d3nvrqlo8rj1kw.cloudfront.net/127.0.0.1 -address=/d3p9ql8flgemg7.cloudfront.net/127.0.0.1 -address=/d3pe8wzpurrzss.cloudfront.net/127.0.0.1 -address=/d3pkae9owd2lcf.cloudfront.net/127.0.0.1 -address=/d3q2dpprdsteo.cloudfront.net/127.0.0.1 -address=/d3qszud4qdthr8.cloudfront.net/127.0.0.1 -address=/d3s6ctxr1rpcpt.cloudfront.net/127.0.0.1 -address=/d3t2wca0ou3lqz.cloudfront.net/127.0.0.1 -address=/d3t9ip55bsuxrf.cloudfront.net/127.0.0.1 -address=/d3tdefw8pwfkbk.cloudfront.net/127.0.0.1 -address=/d3uqm14ppr8tkw.cloudfront.net/127.0.0.1 -address=/d3vc1nm9xbncz5.cloudfront.net/127.0.0.1 -address=/d5pvnbpawsaav.cloudfront.net/127.0.0.1 -address=/d6bdy3eto8fyu.cloudfront.net/127.0.0.1 -address=/d8qy7md4cj3gz.cloudfront.net/127.0.0.1 -address=/da5w2k479hyx2.cloudfront.net/127.0.0.1 -address=/dal9hkyfi0m0n.cloudfront.net/127.0.0.1 -address=/dart.clearchannel.com/127.0.0.1 -address=/dasfdasfasdf.no-ip.info/127.0.0.1 -address=/data.apn.co.nz/127.0.0.1 -address=/data.neuroxmedia.com/127.0.0.1 -address=/dbam.dashbida.com/127.0.0.1 -address=/dbcdqp72lzmvj.cloudfront.net/127.0.0.1 -address=/dcdevtzxo4bb0.cloudfront.net/127.0.0.1 -address=/ddwht76d9jvfl.cloudfront.net/127.0.0.1 -address=/delivery-dev.thebloggernetwork.com/127.0.0.1 -address=/delivery.thebloggernetwork.com/127.0.0.1 -address=/dew9ckzjyt2gn.cloudfront.net/127.0.0.1 -address=/dff7tx5c2qbxc.cloudfront.net/127.0.0.1 -address=/display.digitalriver.com/127.0.0.1 -address=/disy2s34euyqm.cloudfront.net/127.0.0.1 -address=/dizixdllzznrf.cloudfront.net/127.0.0.1 -address=/djlf5xdlz7m8m.cloudfront.net/127.0.0.1 -address=/djr4k68f8n55o.cloudfront.net/127.0.0.1 -address=/dkd69bwkvrht1.cloudfront.net/127.0.0.1 -address=/dkdwv3lcby5zi.cloudfront.net/127.0.0.1 -address=/dl392qndlveq0.cloudfront.net/127.0.0.1 -address=/dl5v5atodo7gn.cloudfront.net/127.0.0.1 -address=/dlupv9uqtjlie.cloudfront.net/127.0.0.1 -address=/dm0acvguygm9h.cloudfront.net/127.0.0.1 -address=/dm8srf206hien.cloudfront.net/127.0.0.1 -address=/dp51h10v6ggpa.cloudfront.net/127.0.0.1 -address=/dpsq2uzakdgqz.cloudfront.net/127.0.0.1 -address=/dq2tgxnc2knif.cloudfront.net/127.0.0.1 -address=/dqhi3ea93ztgv.cloudfront.net/127.0.0.1 -address=/dr3k6qonw2kee.cloudfront.net/127.0.0.1 -address=/dr8pk6ovub897.cloudfront.net/127.0.0.1 -address=/drf8e429z5jzt.cloudfront.net/127.0.0.1 -address=/dsh7ky7308k4b.cloudfront.net/127.0.0.1 -address=/dtrk.slimcdn.com/127.0.0.1 -address=/du2uh7rq0r0d3.cloudfront.net/127.0.0.1 -address=/duct5ntjian71.cloudfront.net/127.0.0.1 -address=/dv7t7qyvgyrt5.cloudfront.net/127.0.0.1 -address=/dvf2u7vwmkr5w.cloudfront.net/127.0.0.1 -address=/dvnafl0qtqz9k.cloudfront.net/127.0.0.1 -address=/dvt4pepo9om3r.cloudfront.net/127.0.0.1 -address=/dx5qvhwg92mjd.cloudfront.net/127.0.0.1 -address=/dxq6c0tx3v6mm.cloudfront.net/127.0.0.1 -address=/dxqd86uz345mg.cloudfront.net/127.0.0.1 -address=/dy48bnzanqw0v.cloudfront.net/127.0.0.1 -address=/dycpc40hvg4ki.cloudfront.net/127.0.0.1 -address=/dyl3p6so5yozo.cloudfront.net/127.0.0.1 -address=/epowernetworktrackerimages.s3.amazonaws.com/127.0.0.1 -address=/euwidget.imshopping.com/127.0.0.1 -address=/events.kalooga.com/127.0.0.1 -address=/ext.theglobalweb.com/127.0.0.1 -address=/feeds.logicbuy.com/127.0.0.1 -address=/ft.pnop.com/127.0.0.1 -address=/gateway.fortunelounge.com/127.0.0.1 -address=/gateways.s3.amazonaws.com/127.0.0.1 -address=/geo.connexionsecure.com/127.0.0.1 -address=/geobanner.friendfinder.com/127.0.0.1 -address=/geobanner.passion.com/127.0.0.1 -address=/gfaf-banners.s3.amazonaws.com/127.0.0.1 -address=/hitfox-jobboard.c66.me/127.0.0.1 -address=/homad-global-configs.schneevonmorgen.com/127.0.0.1 -address=/im.ov.yahoo.co.jp/127.0.0.1 -address=/ima3vpaid.appspot.com/127.0.0.1 -address=/indieclick.3janecdn.com/127.0.0.1 -address=/inskin.vo.llnwd.net/127.0.0.1 -address=/k2team.kyiv.ua/127.0.0.1 -address=/karma.mdpcdn.com/127.0.0.1 -address=/kbnetworkz.s3.amazonaws.com/127.0.0.1 -address=/leaddyno-client-images.s3.amazonaws.com/127.0.0.1 -address=/mads.aol.com/127.0.0.1 -address=/marketing.888.com/127.0.0.1 -address=/mb.zam.com/127.0.0.1 -address=/mbid.advance.net/127.0.0.1 -address=/medrx.telstra.com.au/127.0.0.1 -address=/mozo-widgets.f2.com.au/127.0.0.1 -address=/network.aufeminin.com/127.0.0.1 -address=/network.business.com/127.0.0.1 -address=/oas.luxweb.com/127.0.0.1 -address=/odin.goo.mx/127.0.0.1 -address=/on.maxspeedcdn.com/127.0.0.1 -address=/ox-i.cordillera.tv/127.0.0.1 -address=/partner.bargaindomains.com/127.0.0.1 -address=/partner.catchy.com/127.0.0.1 -address=/partner.premiumdomains.com/127.0.0.1 -address=/partners.fshealth.com/127.0.0.1 -address=/partners.optiontide.com/127.0.0.1 -address=/partners.rochen.com/127.0.0.1 -address=/partners.sportingbet.com.au/127.0.0.1 -address=/partners.vouchedfor.co.uk/127.0.0.1 -address=/partners.xpertmarket.com/127.0.0.1 -address=/pb.s3wfg.com/127.0.0.1 -address=/priceinfo.comuv.com/127.0.0.1 -address=/promos.fling.com/127.0.0.1 -address=/promote.pair.com/127.0.0.1 -address=/promotions.iasbet.com/127.0.0.1 -address=/pub.betclick.com/127.0.0.1 -address=/pubportal.brkmd.com/127.0.0.1 -address=/pubs.hiddennetwork.com/127.0.0.1 -address=/rack.bauermedia.co.uk/127.0.0.1 -address=/res3.feedsportal.com/127.0.0.1 -address=/revealads.appspot.com/127.0.0.1 -address=/rotabanner.kulichki.net/127.0.0.1 -address=/rotator.tradetracker.net/127.0.0.1 -address=/s-yoolk-banner-assets.yoolk.com/127.0.0.1 -address=/s-yoolk-billboard-assets.yoolk.com/127.0.0.1 -address=/secretmedia.s3.amazonaws.com/127.0.0.1 -address=/servedby.keygamesnetwork.com/127.0.0.1 -address=/sitescout-video-cdn.edgesuite.net/127.0.0.1 -address=/slot.union.ucweb.com/127.0.0.1 -address=/smart.styria-digital.com/127.0.0.1 -address=/smblock.s3.amazonaws.com/127.0.0.1 -address=/squarespace.evyy.net/127.0.0.1 -address=/stats.hosting24.com/127.0.0.1 -address=/stats.sitesuite.org/127.0.0.1 -address=/streaming.rtbiddingplatform.com/127.0.0.1 -address=/stuff-nzwhistleout.s3.amazonaws.com/127.0.0.1 -address=/survey.g.doubleclick.net/127.0.0.1 -address=/syndication.jsadapi.com/127.0.0.1 -address=/syndication1.viraladnetwork.net/127.0.0.1 -address=/tags.sprizzy.com/127.0.0.1 -address=/tags2.adshell.net/127.0.0.1 -address=/tap.more-results.net/127.0.0.1 -address=/ti.tradetracker.net/127.0.0.1 -address=/track.bcvcmedia.com/127.0.0.1 -address=/twinplan.com/127.0.0.1 -address=/utility.rogersmedia.com/127.0.0.1 -address=/vendor1.fitschigogerl.com/127.0.0.1 -address=/web-jp.ad-v.jp/127.0.0.1 -address=/whistleout.s3.amazonaws.com/127.0.0.1 -address=/widget.crowdignite.com/127.0.0.1 -address=/widget.kelkoo.com/127.0.0.1 -address=/widget.raaze.com/127.0.0.1 -address=/widget.searchschoolsnetwork.com/127.0.0.1 -address=/widget.shopstyle.com.au/127.0.0.1 -address=/widget.solarquotes.com.au/127.0.0.1 -address=/widgets.realestate.com.au/127.0.0.1 -address=/wlpinnaclesports.eacdn.com/127.0.0.1 -address=/wtpn.twenga.co.uk/127.0.0.1 -address=/wtpn.twenga.de/127.0.0.1 -address=/yb.torchbrowser.com/127.0.0.1 -address=/yeas.yahoo.co.jp/127.0.0.1 -address=/zapads.zapak.com/127.0.0.1 -address=/zeus.qj.net/127.0.0.1 -address=/iadc.qwapi.com/127.0.0.1 -address=/d1nmk7iw7hajjn.cloudfront.net/127.0.0.1 -address=/d3jgr4uve1d188.cloudfront.net/127.0.0.1 -address=/d3ujids68p6xmq.cloudfront.net/127.0.0.1 -address=/ad.duga.jp/127.0.0.1 -address=/ad.iloveinterracial.com/127.0.0.1 -address=/ads.videosz.com/127.0.0.1 -address=/affiliates.thrixxx.com/127.0.0.1 -address=/ard.sweetdiscreet.com/127.0.0.1 -address=/bannershotlink.perfectgonzo.com/127.0.0.1 -address=/blaaaa12.googlecode.com/127.0.0.1 -address=/br.blackfling.com/127.0.0.1 -address=/br.fling.com/127.0.0.1 -address=/br.realitykings.com/127.0.0.1 -address=/click.hay3s.com/127.0.0.1 -address=/cpm.amateurcommunity.com/127.0.0.1 -address=/d1mib12jcgwmnv.cloudfront.net/127.0.0.1 -address=/d3ud741uvs727m.cloudfront.net/127.0.0.1 -address=/dailyvideo.securejoin.com/127.0.0.1 -address=/desk.cmix.org/127.0.0.1 -address=/feeds.videosz.com/127.0.0.1 -address=/ff.nsg.org.ua/127.0.0.1 -address=/freexxxvideoclip.aebn.net/127.0.0.1 -address=/gashot.yurivideos.com/127.0.0.1 -address=/geo.cliphunter.com/127.0.0.1 -address=/geo.frtya.com/127.0.0.1 -address=/geo.frtyd.com/127.0.0.1 -address=/geobanner.adultfriendfinder.com/127.0.0.1 -address=/geobanner.alt.com/127.0.0.1 -address=/geobanner.socialflirt.com/127.0.0.1 -address=/in.zog.link/127.0.0.1 -address=/partners.pornerbros.com/127.0.0.1 -address=/s1magnettvcom.maynemyltf.netdna-cdn.com/127.0.0.1 -address=/surv.xbizmedia.com/127.0.0.1 -address=/sweet.game-rust.ru/127.0.0.1 -address=/tool.acces-vod.com/127.0.0.1 -address=/widgets.comcontent.net/127.0.0.1 -address=/widgetssec.cam-content.com/127.0.0.1 -address=/a.cdngeek.net/127.0.0.1 -address=/a.clipconverter.cc/127.0.0.1 -address=/a.extremetech.com/127.0.0.1 -address=/a.giantrealm.com/127.0.0.1 -address=/a.i-sgcm.com/127.0.0.1 -address=/a.kickass.to/127.0.0.1 -address=/a.lolwot.com/127.0.0.1 -address=/a.solarmovie.is/127.0.0.1 -address=/ac2.msn.com/127.0.0.1 -address=/access.njherald.com/127.0.0.1 -address=/ad.cooks.com/127.0.0.1 -address=/ad.crichd.in/127.0.0.1 -address=/ad.digitimes.com.tw/127.0.0.1 -address=/ad.directmirror.com/127.0.0.1 -address=/ad.download.cnet.com/127.0.0.1 -address=/ad.evozi.com/127.0.0.1 -address=/ad.fnnews.com/127.0.0.1 -address=/ad.itweb.co.za/127.0.0.1 -address=/ad.jamster.com/127.0.0.1 -address=/ad.khan.co.kr/127.0.0.1 -address=/ad.kissanime.io/127.0.0.1 -address=/ad.kisscartoon.io/127.0.0.1 -address=/ad.lyricswire.com/127.0.0.1 -address=/ad.mangareader.net/127.0.0.1 -address=/ad.newegg.com/127.0.0.1 -address=/ad.pandora.tv/127.0.0.1 -address=/ad.reachlocal.com/127.0.0.1 -address=/ad.search.ch/127.0.0.1 -address=/ad.services.distractify.com/127.0.0.1 -address=/ad.spreaker.com/127.0.0.1 -address=/adc.stream.moe/127.0.0.1 -address=/adcitrus.com/127.0.0.1 -address=/addirector.vindicosuite.com/127.0.0.1 -address=/adds.weatherology.com/127.0.0.1 -address=/adi1.mac-torrent-download.net/127.0.0.1 -address=/adlink.shopsafe.co.nz/127.0.0.1 -address=/admeta.vo.llnwd.net/127.0.0.1 -address=/adp1.mac-torrent-download.net/127.0.0.1 -address=/ads-rolandgarros.com/127.0.0.1 -address=/ads.pof.com/127.0.0.1 -address=/ads.yahoo.com/127.0.0.1 -address=/ads.zynga.com/127.0.0.1 -address=/adsatt.abcnews.starwave.com/127.0.0.1 -address=/adsatt.espn.starwave.com/127.0.0.1 -address=/adshare.freedocast.com/127.0.0.1 -address=/adsor.openrunner.com/127.0.0.1 -address=/adss.yahoo.com/127.0.0.1 -address=/adstil.indiatimes.com/127.0.0.1 -address=/adtest.theonion.com/127.0.0.1 -address=/advertise.twitpic.com/127.0.0.1 -address=/advice-ads-cdn.vice.com/127.0.0.1 -address=/adx.kat.ph/127.0.0.1 -address=/aff.lmgtfy.com/127.0.0.1 -address=/ajnad.aljazeera.net/127.0.0.1 -address=/alvares.esportsheaven.com/127.0.0.1 -address=/amz.steamprices.com/127.0.0.1 -address=/analytics.mmosite.com/127.0.0.1 -address=/as.inbox.com/127.0.0.1 -address=/asd.projectfreetv.so/127.0.0.1 -address=/avpa.dzone.com/127.0.0.1 -address=/b.localpages.com/127.0.0.1 -address=/b.thefile.me/127.0.0.1 -address=/ba.ccm2.net/127.0.0.1 -address=/ba.kioskea.net/127.0.0.1 -address=/banner.automotiveworld.com/127.0.0.1 -address=/banner.itweb.co.za/127.0.0.1 -address=/banners.beevpn.com/127.0.0.1 -address=/banners.beted.com/127.0.0.1 -address=/banners.clubworldgroup.com/127.0.0.1 -address=/banners.expressindia.com/127.0.0.1 -address=/banners.itweb.co.za/127.0.0.1 -address=/banners.playocio.com/127.0.0.1 -address=/base.filedot.xyz/127.0.0.1 -address=/beap.gemini.yahoo.com/127.0.0.1 -address=/beb.crackwatch.com/127.0.0.1 -address=/bigboy.eurogamer.net/127.0.0.1 -address=/bizanti.youwatch.org/127.0.0.1 -address=/bnrs.ilm.ee/127.0.0.1 -address=/bontent.powvideo.net/127.0.0.1 -address=/bonus.tvmaze.com/127.0.0.1 -address=/bwp.theinsider.com.com/127.0.0.1 -address=/cad.donga.com/127.0.0.1 -address=/cadvv.heraldm.com/127.0.0.1 -address=/cadvv.koreaherald.com/127.0.0.1 -address=/canvas.thenextweb.com/127.0.0.1 -address=/click.livedoor.com/127.0.0.1 -address=/clicks.superpages.com/127.0.0.1 -address=/cnetwidget.creativemark.co.uk/127.0.0.1 -address=/collector.viki.io/127.0.0.1 -address=/content.streamplay.to/127.0.0.1 -address=/converse.tm-awx.com/127.0.0.1 -address=/creatives.livejasmin.com/127.0.0.1 -address=/d.annarbor.com/127.0.0.1 -address=/d.businessinsider.com/127.0.0.1 -address=/d.gossipcenter.com/127.0.0.1 -address=/d.thelocal.com/127.0.0.1 -address=/d2na2p72vtqyok.cloudfront.net/127.0.0.1 -address=/dacash.streamplay.to/127.0.0.1 -address=/dbs.autolatest.ro/127.0.0.1 -address=/dcad.watersoul.com/127.0.0.1 -address=/deals.ledgertranscript.com/127.0.0.1 -address=/digdug.divxnetworks.com/127.0.0.1 -address=/display.superbay.net/127.0.0.1 -address=/dontblockme.modaco.com/127.0.0.1 -address=/eacash.streamplay.to/127.0.0.1 -address=/ehow.com/media/ad.html/127.0.0.1 -address=/embed.xinhuanet.com/127.0.0.1 -address=/engagesrvr.filefactory.com/127.0.0.1 -address=/eva.ucas.com/127.0.0.1 -address=/fan.twitch.tv/127.0.0.1 -address=/fimserve.ign.com/127.0.0.1 -address=/finding.hardwareheaven.com/127.0.0.1 -address=/findnsave.idahostatesman.com/127.0.0.1 -address=/g.brothersoft.com/127.0.0.1 -address=/gameads.digyourowngrave.com/127.0.0.1 -address=/geoshopping.nzherald.co.nz/127.0.0.1 -address=/get.thefile.me/127.0.0.1 -address=/gfx.infomine.com/127.0.0.1 -address=/gr8.cc/addons/banners/127.0.0.1 -address=/green.virtual-nights.com/127.0.0.1 -address=/heavenmedia.v3g4s.com/127.0.0.1 -address=/hejban.youwatch.org/127.0.0.1 -address=/ibanners.empoweredcomms.com.au/127.0.0.1 -address=/iframe.travel.yahoo.com/127.0.0.1 -address=/imads.rediff.com/127.0.0.1 -address=/kat-ads.torrenticity.com/127.0.0.1 -address=/ker.pic2pic.site/127.0.0.1 -address=/kermit.macnn.com/127.0.0.1 -address=/life.imagepix.org/127.0.0.1 -address=/lightson.vpsboard.com/127.0.0.1 -address=/ll.a.hulu.com/127.0.0.1 -address=/londonprivaterentals.standard.co.uk/127.0.0.1 -address=/looky.hyves.org/127.0.0.1 -address=/ls.webmd.com/127.0.0.1 -address=/lw2.gamecopyworld.com/127.0.0.1 -address=/mads.dailymail.co.uk/127.0.0.1 -address=/marketingsolutions.yahoo.com/127.0.0.1 -address=/mb.hockeybuzz.com/127.0.0.1 -address=/mealsandsteals.sandiego6.com/127.0.0.1 -address=/media-delivery.armorgames.com/127.0.0.1 -address=/media-mgmt.armorgames.com/127.0.0.1 -address=/media-system.maltatoday.com.mt/127.0.0.1 -address=/mediamgr.ugo.com/127.0.0.1 -address=/nest.youwatch.org/127.0.0.1 -address=/netspidermm.indiatimes.com/127.0.0.1 -address=/network.sofeminine.co.uk/127.0.0.1 -address=/oas.autotrader.co.uk/127.0.0.1 -address=/oas.skyscanner.net/127.0.0.1 -address=/oasc07.citywire.co.uk/127.0.0.1 -address=/oascentral.chron.com/127.0.0.1 -address=/oascentral.hosted.ap.org/127.0.0.1 -address=/oascentral.newsmax.com/127.0.0.1 -address=/ox-d.rantsports.com/127.0.0.1 -address=/ox-d.sbnation.com/127.0.0.1 -address=/ox-d.wetransfer.com/127.0.0.1 -address=/ox.furaffinity.net/127.0.0.1 -address=/partners-z.com/127.0.0.1 -address=/photo.net/equipment/pg-160/127.0.0.1 -address=/player.1800coupon.com/127.0.0.1 -address=/player.1stcreditrepairs.com/127.0.0.1 -address=/player.800directories.com/127.0.0.1 -address=/player.accoona.com/127.0.0.1 -address=/player.alloutwedding.com/127.0.0.1 -address=/player.insuranceandhealth.com/127.0.0.1 -address=/pmm.people.com.cn/127.0.0.1 -address=/pop-over.powered-by.justplayzone.com/127.0.0.1 -address=/prerollads.ign.com/127.0.0.1 -address=/promo.fileforum.com/127.0.0.1 -address=/pub.chinadailyasia.com/127.0.0.1 -address=/rad.microsoft.com/127.0.0.1 -address=/rad.msn.com/127.0.0.1 -address=/red.bayimg.net/127.0.0.1 -address=/redvase.bravenet.com/127.0.0.1 -address=/richmedia.yimg.com/127.0.0.1 -address=/roia.com/127.0.0.1 -address=/rpt.anchorfree.net/127.0.0.1 -address=/runetki.joyreactor.ru/127.0.0.1 -address=/searchignited.com/127.0.0.1 -address=/sebar.thand.info/127.0.0.1 -address=/serrano.hardwareheaven.com/127.0.0.1 -address=/shoppingpartners2.futurenet.com/127.0.0.1 -address=/showcase.vpsboard.com/127.0.0.1 -address=/showing.hardwareheaven.com/127.0.0.1 -address=/sponsors.s2ki.com/127.0.0.1 -address=/sponsors.webosroundup.com/127.0.0.1 -address=/spproxy.autobytel.com/127.0.0.1 -address=/spt.dictionary.com/127.0.0.1 -address=/srv.thespacereporter.com/127.0.0.1 -address=/static.tucsonsentinel.com/127.0.0.1 -address=/storewidget.pcauthority.com.au/127.0.0.1 -address=/stream.heavenmedia.net/127.0.0.1 -address=/tanzanite.infomine.com/127.0.0.1 -address=/targetedinfo.com/127.0.0.1 -address=/targetedtopic.com/127.0.0.1 -address=/thejesperbay.com/127.0.0.1 -address=/themis.yahoo.com/127.0.0.1 -address=/tmcs.net/127.0.0.1 -address=/tracking.hostgator.com/127.0.0.1 -address=/ua.badongo.com/127.0.0.1 -address=/uimserv.net/127.0.0.1 -address=/unicast.ign.com/127.0.0.1 -address=/unicast.msn.com/127.0.0.1 -address=/verdict.abc.go.com/127.0.0.1 -address=/vice-ads-cdn.vice.com/127.0.0.1 -address=/w.homes.yahoo.net/127.0.0.1 -address=/webmaster.extabit.com/127.0.0.1 -address=/widget.directory.dailycommercial.com/127.0.0.1 -address=/x.castanet.net/127.0.0.1 -address=/yea.uploadimagex.com/127.0.0.1 -address=/yesbeby.whies.info/127.0.0.1 -address=/yrt7dgkf.exashare.com/127.0.0.1 -address=/ysm.yahoo.com/127.0.0.1 -address=/zads.care2.com/127.0.0.1 -address=/zws.avvo.com/127.0.0.1 -address=/ww45.vidzi.tv/127.0.0.1 -address=/a.thefreethoughtproject.com/127.0.0.1 -address=/pub1.cope.es/127.0.0.1 -address=/a.eporner.com/127.0.0.1 -address=/a.heavy-r.com/127.0.0.1 -address=/a.killergram-girls.com/127.0.0.1 -address=/ad.eporner.com/127.0.0.1 -address=/ad.slutload.com/127.0.0.1 -address=/ad.thisav.com/127.0.0.1 -address=/ad.userporn.com/127.0.0.1 -address=/ads.xxxbunker.com/127.0.0.1 -address=/affiliates.goodvibes.com/127.0.0.1 -address=/ashot.txxx.com/127.0.0.1 -address=/b.xcafe.com/127.0.0.1 -address=/banner1.pornhost.com/127.0.0.1 -address=/banners.cams.com/127.0.0.1 -address=/bob.crazyshit.com/127.0.0.1 -address=/brcache.madthumbs.com/127.0.0.1 -address=/cams.pornrabbit.com/127.0.0.1 -address=/creatives.cliphunter.com/127.0.0.1 -address=/creatives.pichunter.com/127.0.0.1 -address=/d1wi563t0137vz.cloudfront.net/127.0.0.1 -address=/d2q52i8yx3j68p.cloudfront.net/127.0.0.1 -address=/d39hdzmeufnl50.cloudfront.net/127.0.0.1 -address=/delivery.porn.com/127.0.0.1 -address=/dildo.tnaflix.com/127.0.0.1 -address=/dot.eporner.com/127.0.0.1 -address=/dot2.eporner.com/127.0.0.1 -address=/dyn.tnaflix.com/127.0.0.1 -address=/exit.macandbumble.com/127.0.0.1 -address=/lw1.cdmediaworld.com/127.0.0.1 -address=/ox2.pron.tv/127.0.0.1 -address=/ox3.pron.tv/127.0.0.1 -address=/partners.keezmovies.com/127.0.0.1 -address=/pr-static.empflix.com/127.0.0.1 -address=/pr-static.tnaflix.com/127.0.0.1 -address=/r.radikal.ru/127.0.0.1 -address=/rev.fapdu.com/127.0.0.1 -address=/site.img.4tube.com/127.0.0.1 -address=/static.kinghost.com/127.0.0.1 -address=/x.eroticity.net/127.0.0.1 -address=/x.vipergirls.to/127.0.0.1 diff --git a/package/lean/openwrt-ssr/files/custom_forward.conf b/package/lean/openwrt-ssr/files/custom_forward.conf deleted file mode 100755 index 60ed6fc53..000000000 --- a/package/lean/openwrt-ssr/files/custom_forward.conf +++ /dev/null @@ -1,68 +0,0 @@ -server=/.skype.com/127.0.0.1#5353 -ipset=/.skype.com/gfwlist -server=/.buzzfeed.com/127.0.0.1#5353 -ipset=/.buzzfeed.com/gfwlist -server=/.openairinterface.org/127.0.0.1#5353 -ipset=/.openairinterface.org/gfwlist -server=/.apple.news/127.0.0.1#5353 -ipset=/.apple.news/gfwlist -server=/.dropboxstatic.com/127.0.0.1#5353 -ipset=/.dropboxstatic.com/gfwlist -server=/.github.com/127.0.0.1#5353 -ipset=/.github.com/gfwlist -server=/.amazonaws.com/127.0.0.1#5353 -ipset=/.amazonaws.com/gfwlist -server=/.aws.amazon.com/127.0.0.1#5353 -ipset=/.aws.amazon.com/gfwlist -server=/.sublimetext.com/127.0.0.1#5353 -ipset=/.sublimetext.com/gfwlist -server=/.clockwise.ee/127.0.0.1#5353 -ipset=/.clockwise.ee/gfwlist -server=/.adobe.com/127.0.0.1#5353 -ipset=/.adobe.com/gfwlist -server=/.nutaq.com/127.0.0.1#5353 -ipset=/.nutaq.com/gfwlist -server=/.uploaded.net/127.0.0.1#5353 -ipset=/.uploaded.net/gfwlist -server=/.whatsapp.com/127.0.0.1#5353 -ipset=/.whatsapp.com/gfwlist -server=/.whatsapp.net/127.0.0.1#5353 -ipset=/.whatsapp.net/gfwlist -server=/.backpackers.com.tw/127.0.0.1#5353 -ipset=/.backpackers.com.tw/gfwlst -server=/.kknews.cc/127.0.0.1#5353 -ipset=/.kknews.cc/gfwlist -server=/.eurecom.fr/127.0.0.1#5353 -ipset=/.eurecom.fr/gfwlist -server=/.91smartyun.pt/127.0.0.1#5353 -ipset=/.91smartyun.pt/gfwlist -server=/.gdax.com/127.0.0.1#5353 -ipset=/.gdax.com/gfwlist -server=/.coinsquare.io/127.0.0.1#5353 -ipset=/.coinsquare.io/gfwlist -server=/.coindesk.com/127.0.0.1#5353 -ipset=/.coindesk.com/gfwlist -server=/.trouter.io/127.0.0.1#5353 -ipset=/.trouter.io/gfwlist -server=/.cryptocompare.com/127.0.0.1#5353 -ipset=/.cryptocompare.com/gfwlist -server=/.github.com/127.0.0.1#5353 -ipset=/.github.com/gfwlist -server=/.azureedge.net/127.0.0.1#5353 -ipset=/.azureedge.net/gfwlist -server=/.wsj.net/127.0.0.1#5353 -ipset=/.wsj.net/gfwlist -server=/.bitfinex.com/127.0.0.1#5353 -ipset=/.bitfinex.com/gfwlist -server=/.textnow.me/127.0.0.1#5353 -ipset=/.textnow.me/gfwlist -server=/.textnow.com/127.0.0.1#5353 -ipset=/.textnow.com/gfwlist -server=/.isnssdk.com/127.0.0.1#5353 -ipset=/.isnssdk.com/gfwlist -server=/.snssdk.com/127.0.0.1#5353 -ipset=/.snssdk.com/gfwlist -server=/.ampproject.org/127.0.0.1#5353 -ipset=/.ampproject.org/gfwlist -server=/.cloudfront.net/127.0.0.1#5353 -ipset=/.cloudfront.net/gfwlist diff --git a/package/lean/openwrt-ssr/files/dnsmasq.conf b/package/lean/openwrt-ssr/files/dnsmasq.conf deleted file mode 100644 index fae802587..000000000 --- a/package/lean/openwrt-ssr/files/dnsmasq.conf +++ /dev/null @@ -1,38 +0,0 @@ -# Change the following lines if you want dnsmasq to serve SRV -# records. -# You may add multiple srv-host lines. -# The fields are ,,,, - -# A SRV record sending LDAP for the example.com domain to -# ldapserver.example.com port 289 -#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389 - -# Two SRV records for LDAP, each with different priorities -#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,1 -#srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2 - -# A SRV record indicating that there is no LDAP server for the domain -# example.com -#srv-host=_ldap._tcp.example.com - -# The following line shows how to make dnsmasq serve an arbitrary PTR -# record. This is useful for DNS-SD. -# The fields are , -#ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services" - -# Change the following lines to enable dnsmasq to serve TXT records. -# These are used for things like SPF and zeroconf. -# The fields are ,,... - -#Example SPF. -#txt-record=example.com,"v=spf1 a -all" - -#Example zeroconf -#txt-record=_http._tcp.example.com,name=value,paper=A4 - -# Provide an alias for a "local" DNS name. Note that this _only_ works -# for targets which are names from DHCP or /etc/hosts. Give host -# "bert" another name, bertrand -# The fields are , -#cname=bertand,bert -conf-dir=/etc/dnsmasq.ssr \ No newline at end of file diff --git a/package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.lmo b/package/lean/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.lmo deleted file mode 100644 index 1a8d335134da4d0fcb0f81119d4311db77868305..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4484 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 github.com/ywb94 --- Licensed to the public under the GNU General Public License v3. - -local m, s, sec, o, kcp_enable -local shadowsocksr = "shadowsocksr" -local uci = luci.model.uci.cursor() -local ipkg = require("luci.model.ipkg") - -local sys = require "luci.sys" - -m = Map(shadowsocksr, translate("ShadowSocksR Client")) - -local server_table = {} -local encrypt_methods = { - "none", - "table", - "rc4", - "rc4-md5-6", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", -} - -local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", - "auth_chain_b", - "auth_chain_c", - "auth_chain_d", - "auth_chain_e", - "auth_chain_f", -} - -obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", -} - -local raw_mode = { - "faketcp", - "udp", - "icmp", -} - -local seq_mode = { - "0", - "1", - "2", - "3", - "4", -} - -local cipher_mode = { - "none", - "xor", - "aes128cbc", -} - -local auth_mode = { - "none", - "simple", - "md5", - "crc32", -} - -local speeder_mode = { - "0", - "1", -} - -uci:foreach(shadowsocksr, "servers", function(s) - if s.alias then - server_table[s[".name"]] = s.alias - elseif s.server and s.server_port then - server_table[s[".name"]] = "%s:%s" %{s.server, s.server_port} - end -end) - --- [[ Servers Setting ]]-- -sec = m:section(TypedSection, "servers", translate("Servers Setting")) -sec.anonymous = true -sec.addremove = true -sec.sortable = true -sec.template = "cbi/tblsection" -sec.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/client/%s") -function sec.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(sec.extedit % sid) - return - end -end - -o = sec:option(DummyValue, "alias", translate("Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = sec:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "server_port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "protocol", translate("Protocol")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "obfs", translate("Obfs")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "kcp_enable", translate("KcpTun")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "switch_enable", translate("Auto Switch")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "0" -end - --- [[ Global Setting ]]-- -s = m:section(TypedSection, "global", translate("Global Setting")) -s.anonymous = true - -o = s:option(ListValue, "global_server", translate("Global Server")) -o:value("nil", translate("Disable")) -for k, v in pairs(server_table) do o:value(k, v) end -o.default = "nil" -o.rmempty = false - -o = s:option(ListValue, "udp_relay_server", translate("UDP Relay Server")) -o:value("", translate("Disable")) -o:value("same", translate("Same as Global Server")) -for k, v in pairs(server_table) do o:value(k, v) end - -o = s:option(Flag, "monitor_enable", translate("Enable Process Monitor")) -o.rmempty = false - -o = s:option(Flag, "enable_switch", translate("Enable Auto Switch")) -o.rmempty = false - -o = s:option(Value, "switch_time", translate("Switch check cycly(second)")) -o.datatype = "uinteger" -o:depends("enable_switch", "1") -o.default = 600 - -o = s:option(Value, "switch_timeout", translate("Check timout(second)")) -o.datatype = "uinteger" -o:depends("enable_switch", "1") -o.default = 3 - -if nixio.fs.access("/usr/bin/ssr-gfw") then -o = s:option(ListValue, "run_mode", translate("Running Mode")) -o:value("router", translate("IP Route Mode")) -o:value("gfw", translate("GFW List Mode")) - -o = s:option(ListValue, "pdnsd_enable", translate("Resolve Dns Mode")) -o:depends("run_mode", "gfw") -o:value("0", translate("Use SSR DNS Tunnel")) -o:value("1", translate("Use Pdnsd(Need to install)")) -o:value("2", translate("Use Other DNS Tunnel(Need to install)")) - -o = s:option(Flag, "tunnel_enable", translate("Enable Tunnel(DNS)")) -o:depends("run_mode", "router") -o.default = 0 - -o = s:option(Value, "tunnel_port", translate("Tunnel Port")) -o:depends("run_mode", "router") -o.datatype = "port" -o.default = 5300 -else -o = s:option(Flag, "tunnel_enable", translate("Enable Tunnel(DNS)")) -o.default = 0 - -o = s:option(Value, "tunnel_port", translate("Tunnel Port")) -o.datatype = "port" -o.default = 5300 -end - -o = s:option(Value, "tunnel_forward", translate("DNS Server IP and Port")) -o.default = "8.8.4.4:53" -o.rmempty = false - --- [[ SOCKS5 Proxy ]]-- -s = m:section(TypedSection, "socks5_proxy", translate("SOCKS5 Proxy")) -s.anonymous = true - -o = s:option(ListValue, "server", translate("Server")) -o:value("nil", translate("Disable")) -for k, v in pairs(server_table) do o:value(k, v) end -o.default = "nil" -o.rmempty = false - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.default = 1234 -o.rmempty = false - --- [[ udp2raw ]]-- -if nixio.fs.access("/usr/bin/udp2raw") then - -s = m:section(TypedSection, "udp2raw", translate("udp2raw tunnel")) -s.anonymous = true - -o = s:option(Flag, "udp2raw_enable", translate("Enable udp2raw")) -o.default = 0 -o.rmempty = false - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "server_port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "key", translate("Password")) -o.password = true -o.rmempty = false - -o = s:option(ListValue, "raw_mode", translate("Raw Mode")) -for _, v in ipairs(raw_mode) do o:value(v) end -o.default = "faketcp" -o.rmempty = false - -o = s:option(ListValue, "seq_mode", translate("Seq Mode")) -for _, v in ipairs(seq_mode) do o:value(v) end -o.default = "3" -o.rmempty = false - -o = s:option(ListValue, "cipher_mode", translate("Cipher Mode")) -for _, v in ipairs(cipher_mode) do o:value(v) end -o.default = "xor" -o.rmempty = false - -o = s:option(ListValue, "auth_mode", translate("Auth Mode")) -for _, v in ipairs(auth_mode) do o:value(v) end -o.default = "simple" -o.rmempty = false - -end - --- [[ udpspeeder ]]-- -if nixio.fs.access("/usr/bin/udpspeeder") then - -s = m:section(TypedSection, "udpspeeder", translate("UDPspeeder")) -s.anonymous = true - -o = s:option(Flag, "udpspeeder_enable", translate("Enable UDPspeeder")) -o.default = 0 -o.rmempty = false - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "server_port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "local_port", translate("Local Port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "key", translate("Password")) -o.password = true -o.rmempty = false - -o = s:option(ListValue, "speeder_mode", translate("Speeder Mode")) -for _, v in ipairs(speeder_mode) do o:value(v) end -o.default = "0" -o.rmempty = false - -o = s:option(Value, "fec", translate("Fec")) -o.default = "20:10" -o.rmempty = false - -o = s:option(Value, "mtu", translate("Mtu")) -o.datatype = "uinteger" -o.default = 1250 -o.rmempty = false - -o = s:option(Value, "queue_len", translate("Queue Len")) -o.datatype = "uinteger" -o.default = 200 -o.rmempty = false - -o = s:option(Value, "timeout", translate("Fec Timeout")) -o.datatype = "uinteger" -o.default = 8 -o.rmempty = false - -end - --- [[ Access Control ]]-- -s = m:section(TypedSection, "access_control", translate("Access Control")) -s.anonymous = true - --- Part of WAN -s:tab("wan_ac", translate("Interfaces - WAN")) - -o = s:taboption("wan_ac", Value, "wan_bp_list", translate("Bypassed IP List")) -o:value("/dev/null", translate("NULL - As Global Proxy")) - -o.default = "/dev/null" -o.rmempty = false - -o = s:taboption("wan_ac", DynamicList, "wan_bp_ips", translate("Bypassed IP")) -o.datatype = "ip4addr" - -o = s:taboption("wan_ac", DynamicList, "wan_fw_ips", translate("Forwarded IP")) -o.datatype = "ip4addr" - --- Part of LAN -s:tab("lan_ac", translate("Interfaces - LAN")) - -o = s:taboption("lan_ac",ListValue, "router_proxy", translate("Router Proxy")) -o:value("1", translatef("Normal Proxy")) -o:value("0", translatef("Bypassed Proxy")) -o:value("2", translatef("Forwarded Proxy")) -o.rmempty = false - -o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("LAN Access Control")) -o:value("0", translate("Disable")) -o:value("w", translate("Allow listed only")) -o:value("b", translate("Allow all except listed")) -o.rmempty = false - -o = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Host List")) -o.datatype = "ipaddr" -luci.ip.neighbors({ family = 4 }, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end -end) -return m diff --git a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server-config.lua b/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server-config.lua deleted file mode 100644 index cf263b5db..000000000 --- a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server-config.lua +++ /dev/null @@ -1,108 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. - -local m, s, o -local shadowsocksr = "shadowsocksr" -local sid = arg[1] - -local encrypt_methods = { - "table", - "rc4", - "rc4-md5", - "rc4-md5-6", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", -} - -local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", -} - -obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth", -} - -m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) - -m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/server") -if m.uci:get(shadowsocksr, sid) ~= "server_config" then - luci.http.redirect(m.redirect) - return -end - - - - --- [[ Server Setting ]]-- -s = m:section(NamedSection, sid, "server_config") -s.anonymous = true -s.addremove = false - -o = s:option(Flag, "enable", translate("Enable")) -o.default = 1 -o.rmempty = false - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "ipaddr" -o.default = "0.0.0.0" -o.rmempty = false - -o = s:option(Value, "server_port", translate("Server Port")) -o.datatype = "port" -o.default = 8388 -o.rmempty = false - -o = s:option(Value, "timeout", translate("Connection Timeout")) -o.datatype = "uinteger" -o.default = 60 -o.rmempty = false - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = false - -o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods) do o:value(v) end -o.rmempty = false - -o = s:option(ListValue, "protocol", translate("Protocol")) -for _, v in ipairs(protocol) do o:value(v) end -o.rmempty = false - - -o = s:option(ListValue, "obfs", translate("Obfs")) -for _, v in ipairs(obfs) do o:value(v) end -o.rmempty = false - -o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) - -o = s:option(Flag, "fast_open", translate("TCP Fast Open")) -o.rmempty = false - -return m diff --git a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server.lua b/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server.lua deleted file mode 100644 index 2157a7537..000000000 --- a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/server.lua +++ /dev/null @@ -1,122 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. - -local m, sec, o -local shadowsocksr = "shadowsocksr" -local uci = luci.model.uci.cursor() -local ipkg = require("luci.model.ipkg") - - -m = Map(shadowsocksr, translate("ShadowSocksR Server")) - -local encrypt_methods = { - "table", - "rc4", - "rc4-md5", - "rc4-md5-6", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", -} - -local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", -} - -obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth", -} - - - - - --- [[ Global Setting ]]-- -sec = m:section(TypedSection, "server_global", translate("Global Setting")) -sec.anonymous = true - - - -o = sec:option(Flag, "enable_server", translate("Enable Server")) -o.rmempty = false - --- [[ Server Setting ]]-- -sec = m:section(TypedSection, "server_config", translate("Server Setting")) -sec.anonymous = true -sec.addremove = true -sec.sortable = true -sec.template = "cbi/tblsection" -sec.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/server/%s") -function sec.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(sec.extedit % sid) - return - end -end - -o = sec:option(Flag, "enable", translate("Enable")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("0") -end -o.rmempty = false - -o = sec:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - -o = sec:option(DummyValue, "server_port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - - -o = sec:option(DummyValue, "encrypt_method", translate("Encrypt Method")) -function o.cfgvalue(...) - local v = Value.cfgvalue(...) - return v and v:upper() or "?" -end - -o = sec:option(DummyValue, "protocol", translate("Protocol")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - - - -o = sec:option(DummyValue, "obfs", translate("Obfs")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or "?" -end - - - - - -return m diff --git a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/servers.lua b/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/servers.lua deleted file mode 100644 index 2533f9df2..000000000 --- a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/servers.lua +++ /dev/null @@ -1,40 +0,0 @@ - - -local m, s, o -local shadowsocksr = "shadowsocksr" - -local function has_bin(name) - return luci.sys.call("command -v %s >/dev/null" %{name}) == 0 -end - -m = Map(shadowsocksr, "%s - %s" %{translate("ShadowSocksR"), translate("Servers Manage")}) - --- Server Subscribe -if nixio.fs.access("/usr/share/shadowsocksr/subscribe.sh") and has_bin("base64") and has_bin("curl") and has_bin("bash") and has_bin("dig") then - s = m:section(TypedSection, "server_subscribe", translate("Server subscription")) - s.anonymous = true - - o = s:option(Flag, "auto_update", translate("Auto Update")) - o.rmempty = false - - o = s:option(Flag, "proxy", translate("Through proxy update")) - o.rmempty = false - - o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) - for t = 0,23 do - o:value(t, t..":00") - end - o.default=2 - o.rmempty = false - - o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL")) - o.rmempty = true - - o = s:option(Button,"update",translate("Update")) - o.write = function() - luci.sys.call("/usr/share/shadowsocksr/subscribe.sh >/dev/null 2>&1") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) - end -end - -return m diff --git a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/status.lua b/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/status.lua deleted file mode 100644 index 879d57b71..000000000 --- a/package/lean/openwrt-ssr/files/luci/model/cbi/shadowsocksr/status.lua +++ /dev/null @@ -1,258 +0,0 @@ --- Copyright (C) 2017 yushi studio --- Licensed to the public under the GNU General Public License v3. - -local IPK_Version="3.1.0" -local m, s, o -local redir_run=0 -local reudp_run=0 -local sock5_run=0 --- local server_run=0 -local kcptun_run=0 -local tunnel_run=0 -local udp2raw_run=0 -local udpspeeder_run=0 -local gfw_count=0 -local ad_count=0 -local ip_count=0 -local gfwmode=0 - -if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then -gfwmode=1 -end - -local shadowsocksr = "shadowsocksr" --- html constants -font_blue = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -local fs = require "nixio.fs" -local sys = require "luci.sys" -local kcptun_version=translate("Unknown") -local kcp_file="/usr/bin/ssr-kcptun" -if not fs.access(kcp_file) then - kcptun_version=translate("Not exist") -else - if not fs.access(kcp_file, "rwx", "rx", "rx") then - fs.chmod(kcp_file, 755) - end - kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'") - if not kcptun_version or kcptun_version == "" then - kcptun_version = translate("Unknown") - end - -end - -local udp2raw_version=translate("Unknown") -local udp2raw_file="/usr/bin/udp2raw" -if not fs.access(udp2raw_file) then - udp2raw_version=translate("Not exist") -else - if not fs.access(udp2raw_file, "rwx", "rx", "rx") then - fs.chmod(udp2raw_file, 755) - end - udp2raw_version=sys.exec(udp2raw_file .. " -h |grep 'git version' |awk -F ':' '{print $2}'|awk '{print $1}'") - if not udp2raw_version or udp2raw_version == "" then - udp2raw_version = translate("Unknown") - end -end - -local udpspeeder_version=translate("Unknown") -local udpspeeder_file="/usr/bin/udpspeeder" -if not fs.access(udpspeeder_file) then - udpspeeder_version=translate("Not exist") -else - if not fs.access(udpspeeder_file, "rwx", "rx", "rx") then - fs.chmod(udpspeeder_file, 755) - end - udpspeeder_version=sys.exec(udpspeeder_file .. " -h |grep 'git version' |awk -F ':' '{print $2}'|awk '{print $1}'") - if not udpspeeder_version or udpspeeder_version == "" then - udpspeeder_version = translate("Unknown") - end -end - -if gfwmode==1 then - gfw_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2 - if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then - ad_count=tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")) - end -end - -if nixio.fs.access("/etc/china_ssr.txt") then - ip_count = sys.exec("cat /etc/china_ssr.txt | wc -l") -end - -local icount=sys.exec("ps -w | grep ssr-reudp |grep -v grep| wc -l") -if tonumber(icount)>0 then -reudp_run=1 -else -icount=sys.exec("ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") -if tonumber(icount)>0 then -reudp_run=1 -end -end - - -if luci.sys.call("pidof ssr-redir >/dev/null") == 0 then -redir_run=1 -end - -if luci.sys.call("ps -w | grep ssr-local |grep -v grep >/dev/null") == 0 then -sock5_run=1 -end - -if luci.sys.call("pidof ssr-kcptun >/dev/null") == 0 then -kcptun_run=1 -end - --- if luci.sys.call("pidof ssr-server >/dev/null") == 0 then --- server_run=1 --- end - -if luci.sys.call("ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then -tunnel_run=1 -end - -if luci.sys.call("pidof udp2raw >/dev/null") == 0 then -udp2raw_run=1 -end - -if luci.sys.call("pidof udpspeeder >/dev/null") == 0 then -udpspeeder_run=1 -end - -m = SimpleForm("Version", translate("Running Status")) -m.reset = false -m.submit = false - -s=m:field(DummyValue,"redir_run",translate("Global Client")) -s.rawhtml = true -if redir_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - --- s=m:field(DummyValue,"server_run",translate("Global SSR Server")) --- s.rawhtml = true --- if server_run == 1 then --- s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off --- else --- s.value = translate("Not Running") --- end - -s=m:field(DummyValue,"reudp_run",translate("UDP Relay")) -s.rawhtml = true -if reudp_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"sock5_run",translate("SOCKS5 Proxy")) -s.rawhtml = true -if sock5_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"tunnel_run",translate("DNS Tunnel")) -s.rawhtml = true -if tunnel_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) -s.rawhtml = true -if kcptun_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"udp2raw_run",translate("udp2raw")) -s.rawhtml = true -if udp2raw_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"udpspeeder_run",translate("UDPspeeder")) -s.rawhtml = true -if udpspeeder_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end - -s=m:field(DummyValue,"google",translate("Google Connectivity")) -s.value = translate("No Check") -s.template = "shadowsocksr/check" - -s=m:field(DummyValue,"baidu",translate("Baidu Connectivity")) -s.value = translate("No Check") -s.template = "shadowsocksr/check" - -if gfwmode==1 then -s=m:field(DummyValue,"gfw_data",translate("GFW List Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value =tostring(math.ceil(gfw_count)) .. " " .. translate("Records") - -s=m:field(DummyValue,"ad_data",translate("Advertising Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value =tostring(math.ceil(ad_count)) .. " " .. translate("Records") -end - -s=m:field(DummyValue,"ip_data",translate("China IP Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value =ip_count .. " " .. translate("Records") - -s=m:field(DummyValue,"check_port",translate("Check Server Port")) -s.template = "shadowsocksr/checkport" -s.value =translate("No Check") - -s=m:field(DummyValue,"version",translate("IPK Version")) -s.rawhtml = true -s.value =IPK_Version - -s=m:field(DummyValue,"ipk_project",translate("IPK Project")) -s.rawhtml = true -s.value =bold_on .. [[]] - .. "https://github.com/ywb94/openwrt-ssr" .. [[]] .. bold_off - -s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) -s.rawhtml = true -s.value =kcptun_version - -s=m:field(DummyValue,"kcptun_project",translate("Kcp Tun Project")) -s.rawhtml = true -s.value =bold_on .. [[]] - .. "https://github.com/xtaci/kcptun" .. [[]] .. bold_off - -s=m:field(DummyValue,"udp2raw_version",translate("udp2raw Version")) -s.rawhtml = true -s.value =udp2raw_version - -s=m:field(DummyValue,"udp2raw_project",translate("udp2raw tunnel Project")) -s.rawhtml = true -s.value =bold_on .. [[]] - .. "https://github.com/wangyu-/udp2raw-tunnel" .. [[]] .. bold_off - -s=m:field(DummyValue,"udpspeeder_version",translate("UDPspeeder Version")) -s.rawhtml = true -s.value =udpspeeder_version - -s=m:field(DummyValue,"udpspeeder_project",translate("UDPspeeder Project")) -s.rawhtml = true -s.value =bold_on .. [[]] - .. "https://github.com/wangyu-/UDPspeeder" .. [[]] .. bold_off - -return m diff --git a/package/lean/openwrt-ssr/files/root/usr/bin/ssr-server b/package/lean/openwrt-ssr/files/root/usr/bin/ssr-server deleted file mode 100644 index 8a6b4bc97f2287f2f0e172c717fa0b597cd3666e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279319 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%0An|LdwaB|p++%ItIL?5-V0;x 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�^P@3ju^XAM` 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 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -static void die(const char *msg) -{ - fprintf(stderr, "Error: %s\n", msg); - exit(1); -} - -static void usage(const char *name) -{ - fprintf(stderr, "Usage: %s input.po output.lmo\n", name); - exit(1); -} - -static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - if( fwrite(ptr, size, nmemb, stream) == 0 ) - die("Failed to write stdout"); -} - -static int extract_string(const char *src, char *dest, int len) -{ - int pos = 0; - int esc = 0; - int off = -1; - - for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) - { - if( (off == -1) && (src[pos] == '"') ) - { - off = pos + 1; - } - else if( off >= 0 ) - { - if( esc == 1 ) - { - switch (src[pos]) - { - case '"': - case '\\': - off++; - break; - } - dest[pos-off] = src[pos]; - esc = 0; - } - else if( src[pos] == '\\' ) - { - dest[pos-off] = src[pos]; - esc = 1; - } - else if( src[pos] != '"' ) - { - dest[pos-off] = src[pos]; - } - else - { - dest[pos-off] = '\0'; - break; - } - } - } - - return (off > -1) ? strlen(dest) : -1; -} - -static int cmp_index(const void *a, const void *b) -{ - uint32_t x = ((const lmo_entry_t *)a)->key_id; - uint32_t y = ((const lmo_entry_t *)b)->key_id; - - if (x < y) - return -1; - else if (x > y) - return 1; - - return 0; -} - -static void print_uint32(uint32_t x, FILE *out) -{ - uint32_t y = htonl(x); - print(&y, sizeof(uint32_t), 1, out); -} - -static void print_index(void *array, int n, FILE *out) -{ - lmo_entry_t *e; - - qsort(array, n, sizeof(*e), cmp_index); - - for (e = array; n > 0; n--, e++) - { - print_uint32(e->key_id, out); - print_uint32(e->val_id, out); - print_uint32(e->offset, out); - print_uint32(e->length, out); - } -} - -int main(int argc, char *argv[]) -{ - char line[4096]; - char key[4096]; - char val[4096]; - char tmp[4096]; - int state = 0; - int offset = 0; - int length = 0; - int n_entries = 0; - void *array = NULL; - lmo_entry_t *entry = NULL; - uint32_t key_id, val_id; - - FILE *in; - FILE *out; - - if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) - usage(argv[0]); - - memset(line, 0, sizeof(key)); - memset(key, 0, sizeof(val)); - memset(val, 0, sizeof(val)); - - while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) - { - if( state == 0 && strstr(line, "msgid \"") == line ) - { - switch(extract_string(line, key, sizeof(key))) - { - case -1: - die("Syntax error in msgid"); - case 0: - state = 1; - break; - default: - state = 2; - } - } - else if( state == 1 || state == 2 ) - { - if( strstr(line, "msgstr \"") == line || state == 2 ) - { - switch(extract_string(line, val, sizeof(val))) - { - case -1: - state = 4; - break; - default: - state = 3; - } - } - else - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 2; - break; - default: - strcat(key, tmp); - } - } - } - else if( state == 3 ) - { - switch(extract_string(line, tmp, sizeof(tmp))) - { - case -1: - state = 4; - break; - default: - strcat(val, tmp); - } - } - - if( state == 4 ) - { - if( strlen(key) > 0 && strlen(val) > 0 ) - { - key_id = sfh_hash(key, strlen(key)); - val_id = sfh_hash(val, strlen(val)); - - if( key_id != val_id ) - { - n_entries++; - array = realloc(array, n_entries * sizeof(lmo_entry_t)); - entry = (lmo_entry_t *)array + n_entries - 1; - - if (!array) - die("Out of memory"); - - entry->key_id = key_id; - entry->val_id = val_id; - entry->offset = offset; - entry->length = strlen(val); - - length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); - - print(val, length, 1, out); - offset += length; - } - } - - state = 0; - memset(key, 0, sizeof(key)); - memset(val, 0, sizeof(val)); - } - - memset(line, 0, sizeof(line)); - } - - print_index(array, n_entries, out); - - if( offset > 0 ) - { - print_uint32(offset, out); - fsync(fileno(out)); - fclose(out); - } - else - { - fclose(out); - unlink(argv[2]); - } - - fclose(in); - return(0); -} diff --git a/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.c b/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.c deleted file mode 100644 index 27205a722..000000000 --- a/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * lmo - Lua Machine Objects - Base functions - * - * Copyright (C) 2009-2010 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "template_lmo.h" - -/* - * Hash function from http://www.azillionmonkeys.com/qed/hash.html - * Copyright (C) 2004-2008 by Paul Hsieh - */ - -uint32_t sfh_hash(const char *data, int len) -{ - uint32_t hash = len, tmp; - int rem; - - if (len <= 0 || data == NULL) return 0; - - rem = len & 3; - len >>= 2; - - /* Main loop */ - for (;len > 0; len--) { - hash += sfh_get16(data); - tmp = (sfh_get16(data+2) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - data += 2*sizeof(uint16_t); - hash += hash >> 11; - } - - /* Handle end cases */ - switch (rem) { - case 3: hash += sfh_get16(data); - hash ^= hash << 16; - hash ^= data[sizeof(uint16_t)] << 18; - hash += hash >> 11; - break; - case 2: hash += sfh_get16(data); - hash ^= hash << 11; - hash += hash >> 17; - break; - case 1: hash += *data; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} - -uint32_t lmo_canon_hash(const char *str, int len) -{ - char res[4096]; - char *ptr, prev; - int off; - - if (!str || len >= sizeof(res)) - return 0; - - for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) - { - if (isspace(*str)) - { - if (!isspace(prev)) - *ptr++ = ' '; - } - else - { - *ptr++ = *str; - } - } - - if ((ptr > res) && isspace(*(ptr-1))) - ptr--; - - return sfh_hash(res, ptr - res); -} - -lmo_archive_t * lmo_open(const char *file) -{ - int in = -1; - uint32_t idx_offset = 0; - struct stat s; - - lmo_archive_t *ar = NULL; - - if (stat(file, &s) == -1) - goto err; - - if ((in = open(file, O_RDONLY)) == -1) - goto err; - - if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) - { - memset(ar, 0, sizeof(*ar)); - - ar->fd = in; - ar->size = s.st_size; - - fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); - - if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) - goto err; - - idx_offset = ntohl(*((const uint32_t *) - (ar->mmap + ar->size - sizeof(uint32_t)))); - - if (idx_offset >= ar->size) - goto err; - - ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); - ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); - ar->end = ar->mmap + ar->size; - - return ar; - } - -err: - if (in > -1) - close(in); - - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - free(ar); - } - - return NULL; -} - -void lmo_close(lmo_archive_t *ar) -{ - if (ar != NULL) - { - if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) - munmap(ar->mmap, ar->size); - - close(ar->fd); - free(ar); - - ar = NULL; - } -} - - -lmo_catalog_t *_lmo_catalogs = NULL; -lmo_catalog_t *_lmo_active_catalog = NULL; - -int lmo_load_catalog(const char *lang, const char *dir) -{ - DIR *dh = NULL; - char pattern[16]; - char path[PATH_MAX]; - struct dirent *de = NULL; - - lmo_archive_t *ar = NULL; - lmo_catalog_t *cat = NULL; - - if (!lmo_change_catalog(lang)) - return 0; - - if (!dir || !(dh = opendir(dir))) - goto err; - - if (!(cat = malloc(sizeof(*cat)))) - goto err; - - memset(cat, 0, sizeof(*cat)); - - snprintf(cat->lang, sizeof(cat->lang), "%s", lang); - snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); - - while ((de = readdir(dh)) != NULL) - { - if (!fnmatch(pattern, de->d_name, 0)) - { - snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); - ar = lmo_open(path); - - if (ar) - { - ar->next = cat->archives; - cat->archives = ar; - } - } - } - - closedir(dh); - - cat->next = _lmo_catalogs; - _lmo_catalogs = cat; - - if (!_lmo_active_catalog) - _lmo_active_catalog = cat; - - return 0; - -err: - if (dh) closedir(dh); - if (cat) free(cat); - - return -1; -} - -int lmo_change_catalog(const char *lang) -{ - lmo_catalog_t *cat; - - for (cat = _lmo_catalogs; cat; cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - _lmo_active_catalog = cat; - return 0; - } - } - - return -1; -} - -static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) -{ - unsigned int m, l, r; - uint32_t k; - - l = 0; - r = ar->length - 1; - - while (1) - { - m = l + ((r - l) / 2); - - if (r < l) - break; - - k = ntohl(ar->index[m].key_id); - - if (k == hash) - return &ar->index[m]; - - if (k > hash) - { - if (!m) - break; - - r = m - 1; - } - else - { - l = m + 1; - } - } - - return NULL; -} - -int lmo_translate(const char *key, int keylen, char **out, int *outlen) -{ - uint32_t hash; - lmo_entry_t *e; - lmo_archive_t *ar; - - if (!key || !_lmo_active_catalog) - return -2; - - hash = lmo_canon_hash(key, keylen); - - for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) - { - if ((e = lmo_find_entry(ar, hash)) != NULL) - { - *out = ar->mmap + ntohl(e->offset); - *outlen = ntohl(e->length); - return 0; - } - } - - return -1; -} - -void lmo_close_catalog(const char *lang) -{ - lmo_archive_t *ar, *next; - lmo_catalog_t *cat, *prev; - - for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) - { - if (!strncmp(cat->lang, lang, sizeof(cat->lang))) - { - if (prev) - prev->next = cat->next; - else - _lmo_catalogs = cat->next; - - for (ar = cat->archives; ar; ar = next) - { - next = ar->next; - lmo_close(ar); - } - - free(cat); - break; - } - } -} diff --git a/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.h b/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.h deleted file mode 100644 index 57f59aa56..000000000 --- a/package/lean/openwrt-ssr/tools/po2lmo/src/template_lmo.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * lmo - Lua Machine Objects - General header - * - * Copyright (C) 2009-2012 Jo-Philipp Wich - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _TEMPLATE_LMO_H_ -#define _TEMPLATE_LMO_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (defined(__GNUC__) && defined(__i386__)) -#define sfh_get16(d) (*((const uint16_t *) (d))) -#else -#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif - - -struct lmo_entry { - uint32_t key_id; - uint32_t val_id; - uint32_t offset; - uint32_t length; -} __attribute__((packed)); - -typedef struct lmo_entry lmo_entry_t; - - -struct lmo_archive { - int fd; - int length; - uint32_t size; - lmo_entry_t *index; - char *mmap; - char *end; - struct lmo_archive *next; -}; - -typedef struct lmo_archive lmo_archive_t; - - -struct lmo_catalog { - char lang[6]; - struct lmo_archive *archives; - struct lmo_catalog *next; -}; - -typedef struct lmo_catalog lmo_catalog_t; - - -uint32_t sfh_hash(const char *data, int len); -uint32_t lmo_canon_hash(const char *data, int len); - -lmo_archive_t * lmo_open(const char *file); -void lmo_close(lmo_archive_t *ar); - - -extern lmo_catalog_t *_lmo_catalogs; -extern lmo_catalog_t *_lmo_active_catalog; - -int lmo_load_catalog(const char *lang, const char *dir); -int lmo_change_catalog(const char *lang); -int lmo_translate(const char *key, int keylen, char **out, int *outlen); -void lmo_close_catalog(const char *lang); - -#endif diff --git a/package/lean/shadowsocksR-libev-full/Makefile b/package/lean/shadowsocksR-libev-full/Makefile index f731f8b44..d91fe2836 100644 --- a/package/lean/shadowsocksR-libev-full/Makefile +++ b/package/lean/shadowsocksR-libev-full/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=shadowsocksR-libev -PKG_VERSION:=2.5.1 +PKG_VERSION:=3.0.9 PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE).tar.gz -PKG_SOURCE_URL:=https://github.com/shadowsocksrr/shadowsocksr-libev.git +PKG_SOURCE_URL:=https://github.com/shadowsocksrr/shadowsocksr-libev PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=bc1bbecc49ab5a9afb4ab7076f0d9359dc0493d1 +PKG_SOURCE_VERSION:=d4904568c0bd7e0861c0cbfeaa43740f404db214 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_MAINTAINER:=breakwa11 @@ -31,7 +31,7 @@ define Package/shadowsocksr-libev $(call Package/shadowsocksr-libev/Default) TITLE+= (OpenSSL) VARIANT:=openssl - DEPENDS:=+libopenssl +libpthread +libpcre + DEPENDS:=+libopenssl +libpthread +libpcre +zlib endef define Package/shadowsocksr-libev-alt @@ -168,12 +168,13 @@ ifeq ($(BUILD_VARIANT),polarssl) endif define Package/shadowsocksr-libev/install - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/shadowsocksr $(1)/etc/init.d/shadowsocksr - $(INSTALL_CONF) ./files/shadowsocksr.json $(1)/etc/shadowsocksr.json + #$(INSTALL_DIR) $(1)/etc/init.d + #$(INSTALL_BIN) ./files/shadowsocksr $(1)/etc/init.d/shadowsocksr + #$(INSTALL_CONF) ./files/shadowsocksr.json $(1)/etc/shadowsocksr.json $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-local $(1)/usr/bin/ssr-local $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-redir $(1)/usr/bin/ssr-redir + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-check $(1)/usr/bin/ssr-check $(LN) ssr-local $(1)/usr/bin/ssr-tunnel endef diff --git a/package/lean/openwrt-ssr/patches/0001-ss-check-Backport.patch b/package/lean/shadowsocksR-libev-full/patches/0001-ss-check-Backport.patch similarity index 100% rename from package/lean/openwrt-ssr/patches/0001-ss-check-Backport.patch rename to package/lean/shadowsocksR-libev-full/patches/0001-ss-check-Backport.patch diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index 14582696f..34c7b7f04 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -13,7 +13,7 @@ FEATURES:=squashfs ext4 vdi vmdk pcmcia targz fpu SUBTARGETS:=generic legacy geode 64 MAINTAINER:=Felix Fietkau -KERNEL_PATCHVER:=4.14 +KERNEL_PATCHVER:=4.9 KERNELNAME:=bzImage