From f50d3ec0a0c49cd277ab221d21bf22ce120dd1af Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Fri, 6 Mar 2020 20:27:37 +0800 Subject: [PATCH] luci-app-unblockneteasemusic: bump to 2.8-2 --- .../luci-app-unblockneteasemusic/Makefile | 2 +- .../luasrc/model/cbi/unblockneteasemusic.lua | 30 ++++ .../root/etc/config/unblockneteasemusic | 5 + .../root/etc/init.d/unblockneteasemusic | 146 ++++++++++++------ 4 files changed, 137 insertions(+), 46 deletions(-) diff --git a/package/ctcgfw/luci-app-unblockneteasemusic/Makefile b/package/ctcgfw/luci-app-unblockneteasemusic/Makefile index f1c6afac32..8d6a3a181f 100644 --- a/package/ctcgfw/luci-app-unblockneteasemusic/Makefile +++ b/package/ctcgfw/luci-app-unblockneteasemusic/Makefile @@ -12,7 +12,7 @@ LUCI_DEPENDS:=+bash +busybox +coreutils-nohup +curl +dnsmasq-full +ipset +libope LUCI_PKGARCH:=all PKG_NAME:=luci-app-unblockneteasemusic PKG_VERSION:=2.8 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:=[CTCGFW]Project-OpenWrt diff --git a/package/ctcgfw/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic.lua b/package/ctcgfw/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic.lua index 60a3f06e5d..6d754184e9 100644 --- a/package/ctcgfw/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic.lua +++ b/package/ctcgfw/luci-app-unblockneteasemusic/luasrc/model/cbi/unblockneteasemusic.lua @@ -14,6 +14,7 @@ enable.rmempty = false music_source = s:option(Value, "music_source", translate("音源接口")) music_source:value("default", translate("默认")) +music_source:value("netease", translate("网易云音乐")) music_source:value("qq", translate("QQ音乐")) music_source:value("kuwo", translate("酷我音乐")) music_source:value("migu", translate("咕咪音乐")) @@ -26,6 +27,11 @@ music_source.description = translate("自定义模式下,多个音源请用空 music_source.default = "default" music_source.rmempty = false +neteasemusic_cookie = s:option(Value, "neteasemusic_cookie", translate("NeteaseMusic Cookie")) +neteasemusic_cookie.description = translate("在 music.163.com 获取,需要MUSIC_U值") +neteasemusic_cookie.datatype = "string" +neteasemusic_cookie:depends("music_source", "netease") + qq_cookie = s:option(Value, "qq_cookie", translate("QQ Cookie")) qq_cookie.description = translate("在 y.qq.com 获取,需要uin和qm_keyst值") qq_cookie.placeholder = "uin=; qm_keyst=" @@ -161,4 +167,28 @@ self_issue_cert_key.placeholder = "/usr/share/unblockneteasemusic/core/server.ke self_issue_cert_key.datatype = "file" self_issue_cert_key:depends("advanced_mode", 1) +acl_rule = mp:section(TypedSection,"acl_rule",translate("例外客户端规则"), translate("可以为局域网客户端分别设置不同的例外模式,默认无需设置")) +acl_rule.template="cbi/tblsection" +acl_rule.sortable=true +acl_rule.anonymous=true +acl_rule.addremove=true + +acl_ip_addr=acl_rule:option(Value, "acl_ip_addr", translate("IP 地址")) +acl_ip_addr.width = "40%" +acl_ip_addr.datatype = "ip4addr" +acl_ip_addr.placeholder = "0.0.0.0/0" +luci.ip.neighbors({ family = 4 }, function(entry) + if entry.reachable then + acl_ip_addr:value(entry.dest:string()) + end +end) + +acl_filter_mode = acl_rule:option(ListValue, "acl_filter_mode", translate("规则")) +acl_filter_mode.width = "40%" +acl_filter_mode.default = "disable_all" +acl_filter_mode.rmempty = false +acl_filter_mode:value("disable_all", translate("不代理HTTP和HTTPS")) +acl_filter_mode:value("disable_http", translate("不代理HTTP")) +acl_filter_mode:value("disable_https", translate("不代理HTTPS")) + return mp diff --git a/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic b/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic index efd1f9011f..62accdb55d 100644 --- a/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic +++ b/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/config/unblockneteasemusic @@ -2,6 +2,7 @@ config unblockneteasemusic option enable '0' option music_source 'default' + option neteasemusic_cookie '' option qq_cookie '' option youtube_key '' option enable_flac '0' @@ -20,3 +21,7 @@ config unblockneteasemusic option proxy_server_ip '' option self_issue_cert_crt '/usr/share/unblockneteasemusic/core/server.crt' option self_issue_cert_key '/usr/share/unblockneteasemusic/core/server.key' + +config acl_rule + option ip_addr '' + option filter_mode 'disable_all' diff --git a/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic b/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic index 65c41118b6..2c94b6afff 100755 --- a/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic +++ b/package/ctcgfw/luci-app-unblockneteasemusic/root/etc/init.d/unblockneteasemusic @@ -5,39 +5,59 @@ START=80 STOP=10 +NAME="unblockneteasemusic" + +uci_get_by_type() { + local "ret" + ret="$(uci get "$NAME".@"$1"[0]."$2" 2>/dev/null)" + echo "${ret:=$3}" +} + +uci_get_by_name() { + local "index" + index=0 + if [ -n "$4" ]; then + index="$4" + fi + ret="$(uci get "$NAME".@"$1"["${index}"]."$2" 2>/dev/null)" + echo "${ret:=$3}" +} + lan_addr="$(uci get network.lan.ipaddr)" -enable="$(uci get unblockneteasemusic.@unblockneteasemusic[0].enable)" +enable="$(uci_get_by_type "unblockneteasemusic" "enable" "0")" -music_source="$(uci get unblockneteasemusic.@unblockneteasemusic[0].music_source)" -qq_cookie="$(uci get unblockneteasemusic.@unblockneteasemusic[0].qq_cookie 2>"/dev/null")" -youtube_key="$(uci get unblockneteasemusic.@unblockneteasemusic[0].youtube_key 2>"/dev/null")" +music_source="$(uci_get_by_type "unblockneteasemusic" "music_source" "default")" +neteasemusic_cookie="$(uci_get_by_type "unblockneteasemusic" "neteasemusic_cookie")" +qq_cookie="$(uci_get_by_type "unblockneteasemusic" "qq_cookie")" +youtube_key="$(uci_get_by_type "unblockneteasemusic" "youtube_key")" -enable_flac="$(uci get unblockneteasemusic.@unblockneteasemusic[0].enable_flac)" +enable_flac="$(uci_get_by_type "unblockneteasemusic" "enable_flac" "0")" [ "${enable_flac}" -eq "1" ] && flag_arg="ENABLE_FLAC=true" -endpoint_url="$(uci get unblockneteasemusic.@unblockneteasemusic[0].endpoint_url || echo "http://music.163.com")" -hijack_ways="$(uci get unblockneteasemusic.@unblockneteasemusic[0].hijack_ways || echo "use_ipset")" +endpoint_url="$(uci_get_by_type "unblockneteasemusic" "endpoint_url" "http://music.163.com")" +hijack_ways="$(uci_get_by_type "unblockneteasemusic" "hijack_ways" "use_ipset")" -auto_update="$(uci get unblockneteasemusic.@unblockneteasemusic[0].auto_update)" -update_time="$(uci get unblockneteasemusic.@unblockneteasemusic[0].update_time)" +auto_update="$(uci_get_by_type "unblockneteasemusic" "auto_update" "1")" +update_time="$(uci_get_by_type "unblockneteasemusic" "update_time" "3")" -http_port="$(uci get unblockneteasemusic.@unblockneteasemusic[0].http_port 2>"/dev/null" || echo "5200")" -https_port="$(uci get unblockneteasemusic.@unblockneteasemusic[0].https_port 2>"/dev/null" || echo "5201")" +http_port="$(uci_get_by_type "unblockneteasemusic" "http_port" "5200")" +https_port="$(uci_get_by_type "unblockneteasemusic" "https_port" "5201")" -keep_core_when_upgrade="$(uci get unblockneteasemusic.@unblockneteasemusic[0].keep_core_when_upgrade 2>"/dev/null")" -[ "*$(uci get unblockneteasemusic.@unblockneteasemusic[0].pub_access 2>"/dev/null")*" = "*1*" ] && addr="0.0.0.0" || addr="${lan_addr}" -[ "*$(uci get unblockneteasemusic.@unblockneteasemusic[0].strict_mode 2>"/dev/null")*" = "*1*" ] && strict_mode="-s" +keep_core_when_upgrade="$(uci_get_by_type "unblockneteasemusic" "keep_core_when_upgrade")" +[ "$(uci_get_by_type "unblockneteasemusic" "pub_access")" = "1" ] && addr="0.0.0.0" || addr="${lan_addr}" +[ "$(uci_get_by_type "unblockneteasemusic" "strict_mode")" = "1" ] && strict_mode="-s" -netease_server_ip="$(uci get unblockneteasemusic.@unblockneteasemusic[0].netease_server_ip 2>"/dev/null")" +netease_server_ip="$(uci_get_by_type "unblockneteasemusic" "netease_server_ip")" [ -n "${netease_server_ip}" ] && netease_server_ip="-f ${netease_server_ip}" -proxy_server_ip="$(uci get unblockneteasemusic.@unblockneteasemusic[0].proxy_server_ip 2>"/dev/null")" +proxy_server_ip="$(uci_get_by_type "unblockneteasemusic" "proxy_server_ip")" [ -n "${proxy_server_ip}" ] && proxy_server_ip="-u ${proxy_server_ip}" -self_issue_cert_crt="$(uci get unblockneteasemusic.@unblockneteasemusic[0].self_issue_cert_crt 2>"/dev/null")" -self_issue_cert_key="$(uci get unblockneteasemusic.@unblockneteasemusic[0].self_issue_cert_key 2>"/dev/null")" +self_issue_cert_crt="$(uci_get_by_type "unblockneteasemusic" "self_issue_cert_crt")" +self_issue_cert_key="$(uci_get_by_type "unblockneteasemusic" "self_issue_cert_key")" -set_ipset(){ +set_ipset() +{ if [ "${set_type}" = "start" ]; then mkdir -p "/tmp/dnsmasq.d" rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic.conf" @@ -53,32 +73,56 @@ ipset=/clientlog3.music.163.com/neteasemusic EOF /etc/init.d/dnsmasq reload > "/dev/null" 2>&1 + if ! ipset list "acl_neteasemusic_http" > "/dev/null"; then ipset create "acl_neteasemusic_http" hash:ip; fi + if ! ipset list "acl_neteasemusic_https" > "/dev/null"; then ipset create "acl_neteasemusic_https" hash:ip; fi + ip_addr_num="$(uci show "unblockneteasemusic" | grep -c "filter_mode")" + let ip_addr_num="ip_addr_num-1" + [ "${ip_addr_num}" -ge "0" ] && for i in $(seq 0 "${ip_addr_num}") + do + ip_addr="$(uci_get_by_name "acl_rule" "ip_addr" "" "$i")" + filter_mode="$(uci_get_by_name "acl_rule" "filter_mode" "" "$i")" + case "${filter_mode}" in + "disable_http") + ipset -! add "acl_neteasemusic_http" "${ip_addr}" + ;; + "disable_https") + ipset -! add "acl_neteasemusic_https" "${ip_addr}" + ;; + "disable_all") + ipset -! add "acl_neteasemusic_http" "${ip_addr}" + ipset -! add "acl_neteasemusic_https" "${ip_addr}" + ;; + esac + done + if ! ipset list "neteasemusic" > "/dev/null"; then ipset create "neteasemusic" hash:ip; fi curl --retry "5" --retry-delay "3" -s "http://httpdns.n.netease.com/httpdns/v2/d?domain=music.163.com,interface.music.163.com,interface3.music.163.com,apm.music.163.com,apm3.music.163.com,clientlog.music.163.com,clientlog3.music.163.com" |grep -Eo '[0-9]+?\.[0-9]+?\.[0-9]+?\.[0-9]+?' |sort |uniq |awk '{print "ipset add neteasemusic "$1}' |bash > "/dev/null" 2>&1 - iptables -t nat -N "netease_cloud_music" - iptables -t nat -A "netease_cloud_music" -d "0.0.0.0/8" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "10.0.0.0/8" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "127.0.0.0/8" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "169.254.0.0/16" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "172.16.0.0/12" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "192.168.0.0/16" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "224.0.0.0/4" -j RETURN - iptables -t nat -A "netease_cloud_music" -d "240.0.0.0/4" -j RETURN - iptables -t nat -A "netease_cloud_music" -p tcp --dport 80 -j REDIRECT --to-ports "${http_port}" - iptables -t nat -A "netease_cloud_music" -p tcp --dport 443 -j REDIRECT --to-ports "${https_port}" - iptables -t nat -I PREROUTING -p tcp -m set --match-set "neteasemusic" dst -j "netease_cloud_music" - [ -z "$(iptables -t nat -L "ADBYBY" | grep "UnblockMusic" | sed 's/\/.*//')" ] && iptables -t nat -I "ADBYBY" -m set --match-set "neteasemusic" dst -j RETURN -m comment --comment "AD for UnblockMusic" - [ -z "$(iptables -t nat -L "KOOLPROXY" | grep "UnblockMusic" | sed 's/\/.*//')" ] && iptables -t nat -I "KOOLPROXY" -m set --match-set "neteasemusic" dst -j RETURN -m comment --comment "KP for UnblockMusic" + iptables -t "nat" -N "netease_cloud_music" + iptables -t "nat" -A "netease_cloud_music" -d "0.0.0.0/8" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "10.0.0.0/8" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "127.0.0.0/8" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "169.254.0.0/16" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "172.16.0.0/12" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "192.168.0.0/16" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "224.0.0.0/4" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -d "240.0.0.0/4" -j "RETURN" + iptables -t "nat" -A "netease_cloud_music" -p "tcp" -m "set" ! --match-set "acl_neteasemusic_http" "src" --dport 80 -j "REDIRECT" --to-ports "${http_port}" + iptables -t "nat" -A "netease_cloud_music" -p "tcp" -m "set" ! --match-set "acl_neteasemusic_https" "src" --dport 443 -j "REDIRECT" --to-ports "${https_port}" + iptables -t "nat" -I "PREROUTING" -p "tcp" -m "set" --match-set "neteasemusic" "dst" -j "netease_cloud_music" + [ -z "$(iptables -t "nat" -L "ADBYBY" | grep "UnblockMusic" | sed 's/\/.*//')" ] && iptables -t "nat" -I "ADBYBY" -m "set" --match-set "neteasemusic" "dst" -j "RETURN" -m "comment" --comment "AD for UnblockMusic" + [ -z "$(iptables -t "nat" -L "KOOLPROXY" | grep "UnblockMusic" | sed 's/\/.*//')" ] && iptables -t "nat" -I "KOOLPROXY" -m "set" --match-set "neteasemusic" "dst" -j "RETURN" -m "comment" --comment "KP for UnblockMusic" mkdir -p "/var/etc/" echo "/etc/init.d/unblockneteasemusic restart" > "/var/etc/unblockneteasemusic.include" elif [ "${set_type}" = "stop" ]; then - iptables -t nat -D "PREROUTING" -p tcp -m set --match-set "neteasemusic" dst -j "netease_cloud_music" - iptables -t nat -D "ADBYBY" -m set --match-set "neteasemusic" dst -j RETURN -m comment --comment "AD for UnblockMusic" - iptables -t nat -D "KOOLPROXY" -m set --match-set "neteasemusic" dst -j RETURN -m comment --comment "KP for UnblockMusic" - iptables -t nat -F "netease_cloud_music" - iptables -t nat -X "netease_cloud_music" + iptables -t "nat" -D "PREROUTING" -p "tcp" -m set --match-set "neteasemusic" "dst" -j "netease_cloud_music" + iptables -t "nat" -D "ADBYBY" -m "set" --match-set "neteasemusic" "dst" -j "RETURN" -m "comment" --comment "AD for UnblockMusic" + iptables -t "nat" -D "KOOLPROXY" -m "set" --match-set "neteasemusic" "dst" -j "RETURN" -m "comment" --comment "KP for UnblockMusic" + iptables -t "nat" -F "netease_cloud_music" + iptables -t "nat" -X "netease_cloud_music" ipset destroy "neteasemusic" + ipset destroy "acl_neteasemusic_http" + ipset destroy "acl_neteasemusic_https" echo "" > "/var/etc/unblockneteasemusic.include" rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic.conf" @@ -86,7 +130,8 @@ ipset=/clientlog3.music.163.com/neteasemusic fi } -set_hosts(){ +set_hosts() +{ if [ "${set_type}" = "start" ]; then mkdir -p "/tmp/dnsmasq.d" rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic.conf" @@ -112,16 +157,17 @@ address=/music.httpdns.c.163.com/0.0.0.0 fi } -set_ports(){ +set_ports() +{ if [ "${set_type}" = "start" ]; then - iptables -I INPUT -p tcp --dport "${http_port}" -j ACCEPT - iptables -I INPUT -p tcp --dport "${https_port}" -j ACCEPT + iptables -I "INPUT" -p "tcp" --dport "${http_port}" -j "ACCEPT" + iptables -I "INPUT" -p "tcp" --dport "${https_port}" -j "ACCEPT" mkdir -p "/var/etc/" echo "/etc/init.d/unblockneteasemusic restart" > "/var/etc/unblockneteasemusic.include" elif [ "${set_type}" = "stop" ]; then - iptables -D INPUT -p tcp --dport "${http_port}" -j ACCEPT - iptables -D INPUT -p tcp --dport "${https_port}" -j ACCEPT + iptables -D "INPUT" -p "tcp" --dport "${http_port}" -j "ACCEPT" + iptables -D "INPUT" -p "tcp" --dport "${https_port}" -j "ACCEPT" echo "" > "/var/etc/unblockneteasemusic.include" fi @@ -136,6 +182,16 @@ start() [ ! -e "/usr/share/unblockneteasemusic/core/app.js" ] && { rm -f "/usr/share/unblockneteasemusic/local_ver"; bash "/usr/share/unblockneteasemusic/update.sh" "update_core_non_restart"; } [ ! -e "/usr/share/unblockneteasemusic/core/app.js" ] && { echo "Core Not Found, please download it before starting." >> "/tmp/unblockneteasemusic.log"; exit 1; } + [ -n "${neteasemusic_cookie}" ] && { + ub_cookie_line="$(sed -n -e "/netease.path.includes('song\/enhance')/=" "/usr/share/unblockneteasemusic/core/src/hook.js")"; + [ -n "${ub_cookie_line}" ] && { let ub_cookie_endline="${ub_cookie_line}+6"; sed -i "${ub_cookie_line},${ub_cookie_endline}d" "/usr/share/unblockneteasemusic/core/src/hook.js"; } + sed -i "/netease.path == '\/api\/song\/enhance\/download\/url'/i\\\t\\t\\t\\tif (netease.path.includes('song\/enhance')) {" "/usr/share/unblockneteasemusic/core/src/hook.js"; + sed -i "/if (netease.path.includes('song\/enhance')) {/a\\\t\\t\\t\\t\\treq.headers.cookie = [" "/usr/share/unblockneteasemusic/core/src/hook.js"; + sed -i "/req.headers.cookie = \[/a\\\t\\t\\t\\t\\t\\t'MUSIC_U=${neteasemusic_cookie}'," "/usr/share/unblockneteasemusic/core/src/hook.js"; + sed -i "/'MUSIC_U=${neteasemusic_cookie}',/a\\\t\\t\\t\\t\\t\\treq.headers.cookie.replace(\/\\\s*MUSIC_\\\w=[^\\\s;]+;*\/g, '')" "/usr/share/unblockneteasemusic/core/src/hook.js"; + sed -i "/req.headers.cookie.replace(\/\\\s\\*MUSIC_\\\w=[^\\\s;]\\+/a\\\t\\t\\t\\t\\t].filter(line => line).join('; ')" "/usr/share/unblockneteasemusic/core/src/hook.js" + sed -i "/].filter(line => line).join('; ')/a\\\t\\t\\t\\t}\\n" "/usr/share/unblockneteasemusic/core/src/hook.js" +} [ -n "${qq_cookie}" ] && { qq_cookie_line="$(awk "/'cookie':/{print NR}" "/usr/share/unblockneteasemusic/core/src/provider/qq.js")"; sed -i "${qq_cookie_line}d" "/usr/share/unblockneteasemusic/core/src/provider/qq.js"; @@ -163,7 +219,7 @@ start() set_hosts > "/dev/null" 2>&1 fi - [ "*$(uci get unblockneteasemusic.@unblockneteasemusic[0].pub_access 2>"/dev/null")*" = "*1*" ] && set_ports > "/dev/null" 2>&1 + [ "$(uci_get_by_type "unblockneteasemusic" pub_access)" = "1" ] && set_ports > "/dev/null" 2>&1 sed -i '/unblockneteasemusic/d' /etc/crontabs/root [ "${auto_update}" -eq "1" ] && echo "0 ${update_time} * * * /usr/share/unblockneteasemusic/update.sh update_core" >> "/etc/crontabs/root"