From 44b6c7527f1f82bec88ee05c3fce96e3c19f4025 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Dec 2019 18:52:05 +0800 Subject: [PATCH] luci-app-unblockneteasemusic-go: add luci support for UnblockNeteaseMusic-Go --- .../luci-app-unblockneteasemusic-go/Makefile | 21 +++ .../controller/unblockneteasemusic-go.lua | 26 ++++ .../model/cbi/unblockneteasemusic-go.lua | 51 +++++++ .../model/cbi/unblockneteasemusicgo_log.lua | 14 ++ .../unblockneteasemusicgo_status.htm | 22 +++ .../root/etc/config/unblockneteasemusic-go | 8 ++ .../root/etc/init.d/unblockneteasemusic-go | 125 ++++++++++++++++++ .../etc/ppp/ip-up.d/unblockneteasemusic-go | 4 + .../etc/uci-defaults/unblockneteasemusic-go | 17 +++ .../share/UnblockNeteaseMusic-Go/log_check.sh | 11 ++ 10 files changed, 299 insertions(+) create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/Makefile create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/controller/unblockneteasemusic-go.lua create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusic-go.lua create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusicgo_log.lua create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/view/unblockneteasemusic-go/unblockneteasemusicgo_status.htm create mode 100644 package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/config/unblockneteasemusic-go create mode 100755 package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/init.d/unblockneteasemusic-go create mode 100755 package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/ppp/ip-up.d/unblockneteasemusic-go create mode 100755 package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/uci-defaults/unblockneteasemusic-go create mode 100755 package/ctcgfw/luci-app-unblockneteasemusic-go/root/usr/share/UnblockNeteaseMusic-Go/log_check.sh diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/Makefile b/package/ctcgfw/luci-app-unblockneteasemusic-go/Makefile new file mode 100644 index 0000000000..a2cef61a94 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/Makefile @@ -0,0 +1,21 @@ +# Copyright (C) 2016 Openwrt.org +# +# This is a free software, use it under GNU General Public License v3.0. +# +# Created By [CTCGFW]Project-OpenWrt +# https://github.com/project-openwrt + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=LuCI support for UnblockNeteaseMusic-Go +LUCI_DEPENDS:=+bash +busybox +coreutils-nohup +curl +dnsmasq-full +ipset +UnblockNeteaseMusic-Go +LUCI_PKGARCH:=all +PKG_NAME:=luci-app-unblockneteasemusic-go +PKG_VERSION:=1.0 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=[CTCGFW]Project-OpenWrt + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/controller/unblockneteasemusic-go.lua b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/controller/unblockneteasemusic-go.lua new file mode 100644 index 0000000000..cfb802c663 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/controller/unblockneteasemusic-go.lua @@ -0,0 +1,26 @@ +-- This is a free software, use it under GNU General Public License v3.0. +-- Created By [CTCGFW]Project OpenWRT +-- https://github.com/project-openwrt + +module("luci.controller.unblockneteasemusic-go", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/unblockneteasemusic-go") then + return + end + + entry({"admin", "services", "unblockneteasemusic-go"},firstchild(), _("解除网易云音乐播放限制 (Golang)"), 50).dependent = false + + entry({"admin", "services", "unblockneteasemusic-go", "general"},cbi("unblockneteasemusic-go"), _("基本设定"), 1) + entry({"admin", "services", "unblockneteasemusic-go", "log"},form("unblockneteasemusicgo_log"), _("日志"), 2) + + entry({"admin", "services", "unblockneteasemusic-go", "status"},call("act_status")).leaf=true + entry({"admin", "services", "unblockneteasemusic-go", "update_core"},call("act_update_core")) +end + +function act_status() + local e={} + e.running=luci.sys.call("ps |grep UnblockNeteaseMusic-Go |grep -v grep >/dev/null")==0 + luci.http.prepare_content("application/json") + luci.http.write_json(e) +end diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusic-go.lua b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusic-go.lua new file mode 100644 index 0000000000..866e18fe61 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusic-go.lua @@ -0,0 +1,51 @@ +mp = Map("unblockneteasemusic", translate("解除网易云音乐播放限制")) +mp.description = translate("原理:采用 [酷我/酷狗/咕咪] 音源,替换网易云音乐 无版权/收费 歌曲链接
具体使用方法参见:https://github.com/project-openwrt/luci-app-unblockneteasemusic-go") + +mp:section(SimpleSection).template = "unblockneteasemusic-go/unblockneteasemusicgo_status" + +s = mp:section(TypedSection, "unblockneteasemusic-go") +s.anonymous=true +s.addremove=false + +enable = s:option(Flag, "enable", translate("启用本插件")) +enable.description = translate("启用本插件以解除网易云音乐播放限制") +enable.default = 0 +enable.rmempty = false + +http_port = s:option(Value, "http_port", translate("[HTTP] 监听端口")) +http_port.description = translate("本插件监听的HTTP端口,不可与其他程序/HTTPS共用一个端口") +http_port.placeholder = "5210" +http_port.default = "5210" +http_port.datatype = "port" +http_port.rmempty = false + +https_port = s:option(Value, "https_port", translate("[HTTPS] 监听端口")) +https_port.description = translate("本插件监听的HTTPS端口,不可与其他程序/HTTP共用一个端口") +https_port.placeholder = "5211" +https_port.default = "5211" +https_port.datatype = "port" +https_port.rmempty = false + +music_source = s:option(ListValue, "music_source", translate("音源接口")) +music_source:value("default", translate("默认")) +music_source:value("kuwo", translate("酷我音乐")) +music_source:value("kugou", translate("酷狗音乐")) +music_source:value("migu", translate("咕咪音乐")) +music_source.description = translate("音源调用接口") +music_source.default = "default" +music_source.rmempty = false + +hijack = s:option(ListValue, "hijack_ways", translate("劫持方法")) +hijack:value("dont_hijack", translate("不开启劫持")) +hijack:value("use_ipset", translate("使用IPSet劫持")) +hijack:value("use_hosts", translate("使用Hosts劫持")) +hijack.description = translate("如果使用Hosts劫持,请将HTTP/HTTPS端口设置为80/443") +hijack.default = "dont_hijack" +hijack.rmempty = false + +daemon_enable = s:option(Flag, "daemon_enable", translate("启用进程守护")) +daemon_enable.description = translate("开启后,附属程序会自动检测主程序运行状态,在主程序退出时自动重启") +daemon_enable.default = 0 +daemon_enable.rmempty = false + +return mp diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusicgo_log.lua b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusicgo_log.lua new file mode 100644 index 0000000000..1307c40cd0 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/model/cbi/unblockneteasemusicgo_log.lua @@ -0,0 +1,14 @@ +local fs = require "nixio.fs" +local conffile = "/tmp/unblockneteasemusic-go.log" + +f = SimpleForm("logview") + +t = f:field(TextValue, "conf") +t.rmempty = true +t.rows = 15 +function t.cfgvalue() + return fs.readfile(conffile) or "" +end +t.readonly="readonly" + +return f diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/view/unblockneteasemusic-go/unblockneteasemusicgo_status.htm b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/view/unblockneteasemusic-go/unblockneteasemusicgo_status.htm new file mode 100644 index 0000000000..ebdd8e6a44 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/luasrc/view/unblockneteasemusic-go/unblockneteasemusicgo_status.htm @@ -0,0 +1,22 @@ + + +
+

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

+
diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/config/unblockneteasemusic-go b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/config/unblockneteasemusic-go new file mode 100644 index 0000000000..d6f9a5ca3e --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/config/unblockneteasemusic-go @@ -0,0 +1,8 @@ + +config unblockneteasemusic-go + option enable '0' + option http_port '5210' + option https_port '5211' + option music_source 'default' + option hijack_ways 'use_ipset' + option daemon_enable '0' diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/init.d/unblockneteasemusic-go b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/init.d/unblockneteasemusic-go new file mode 100755 index 0000000000..b3882124bf --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/init.d/unblockneteasemusic-go @@ -0,0 +1,125 @@ +#!/bin/sh /etc/rc.common +# Created By [CTCGFW]Project OpenWRT +# https://github.com/project-openwrt + +START=80 +STOP=10 + +lan_addr="$(uci get network.lan.ipaddr)" + +enable="$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].enable)" +http_port="$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].http_port)" +https_port="$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].https_port)" +music_source="$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].music_source)" +hijack_ways="$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].hijack_ways)" +[ + +set_ipset(){ + if [ "${set_type}" = "start" ]; then + mkdir -p "/tmp/dnsmasq.d" + rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" + cat <<-EOF > "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" +ipset=/.music.163.com/musicgo +ipset=/interface.music.163.com/musicgo +ipset=/interface3.music.163.com/musicgo +ipset=/apm.music.163.com/musicgo +ipset=/apm3.music.163.com/musicgo + EOF + /etc/init.d/dnsmasq restart > "/dev/null" 2>&1 + + if ! ipset list musicgo > "/dev/null"; then ipset create musicgo hash:ip; fi + curl -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 musicgo "$1}' |bash > "/dev/null" 2>&1 + iptables -t nat -N cloud_music_go + iptables -t nat -A cloud_music_go -d 0.0.0.0/8 -j RETURN + iptables -t nat -A cloud_music_go -d 10.0.0.0/8 -j RETURN + iptables -t nat -A cloud_music_go -d 127.0.0.0/8 -j RETURN + iptables -t nat -A cloud_music_go -d 169.254.0.0/16 -j RETURN + iptables -t nat -A cloud_music_go -d 172.16.0.0/12 -j RETURN + iptables -t nat -A cloud_music_go -d 192.168.0.0/16 -j RETURN + iptables -t nat -A cloud_music_go -d 224.0.0.0/4 -j RETURN + iptables -t nat -A cloud_music_go -d 240.0.0.0/4 -j RETURN + iptables -t nat -A cloud_music_go -p tcp --dport 80 -j REDIRECT --to-ports "${http_port}" + iptables -t nat -A cloud_music_go -p tcp --dport 443 -j REDIRECT --to-ports "${https_port}" + iptables -t nat -I PREROUTING -p tcp -m set --match-set musicgo dst -j cloud_music_go + + mkdir -p /var/etc + cat <<-EOF >> "/var/etc/unblockneteasemusic-go.include" +/etc/init.d/unblockneteasemusic-go restart + EOF + elif [ "${set_type}" = "stop" ]; then + iptables -t nat -D PREROUTING -p tcp -m set --match-set musicgo dst -j cloud_music_go + iptables -t nat -F cloud_music_go + iptables -t nat -X cloud_music_go + ipset destroy musicgo + + echo "" > "/var/etc/unblockneteasemusic-go.include" + rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" + /etc/init.d/dnsmasq restart > "/dev/null" 2>&1 + fi +} + +set_hosts(){ + if [ "${set_type}" = "start" ]; then + mkdir -p "/tmp/dnsmasq.d" + rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" + cat <<-EOF > "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" +address=/music.163.com/${lan_addr} +address=/interface.music.163.com/${lan_addr} +address=/interface3.music.163.com/${lan_addr} +address=/apm.music.163.com/${lan_addr} +address=/apm3.music.163.com/${lan_addr} +address=/music.httpdns.c.163.com/0.0.0.0 + EOF + /etc/init.d/dnsmasq restart > "/dev/null" 2>&1 + + echo "" > "/var/etc/unblockneteasemusic-go.include" + + ip route add 223.252.199.10 dev lo + elif [ "${set_type}" = "stop" ]; then + rm -f "/tmp/dnsmasq.d/dnsmasq-unblockneteasemusic-go.conf" + /etc/init.d/dnsmasq restart > "/dev/null" 2>&1 + + echo "" > "/var/etc/unblockneteasemusic-go.include" + + ip route del 223.252.199.10 + fi +} + +start() +{ + stop + + [ "${enable}" -ne "1" ] && exit 0 +UnblockNeteaseMusic -m 0 -c /usr/share/UnblockNeteaseMusic-Go/server.crt -k /usr/share/UnblockNeteaseMusic-Go/server.key -p 5200 -sp 5201 -o migu:kugou + + if [ "${music_source}" = "default" ]; then + nohup UnblockNeteaseMusic -p "${http_port}" -sp "${https_port}" -m "0" -c "/usr/share/UnblockNeteaseMusic-Go/server.crt" -k "/usr/share/UnblockNeteaseMusic-Go/server.key" > "/tmp/unblockneteasemusic-go.log" 2>&1 & + else + nohup UnblockNeteaseMusic -p "${http_port}" -sp "${https_port}" -o "${music_source}" -m "0" -c "/usr/share/UnblockNeteaseMusic-Go/server.crt" -k "/usr/share/UnblockNeteaseMusic-Go/server.key" > "/tmp/unblockneteasemusic-go.log" 2>&1 & + fi + + set_type="start" + if [ "*${hijack_ways}*" = "*use_ipset*" ]; then + set_ipset > "/dev/null" 2>&1 + elif [ "*${hijack_ways}*" = "*use_hosts*" ]; then + set_hosts > "/dev/null" 2>&1 + fi + + sed -i '/UnblockNeteaseMusic-Go/d' /etc/crontabs/root + echo "*/5 * * * * /usr/share/UnblockNeteaseMusic-Go/log_check.sh" >> "/etc/crontabs/root" + /etc/init.d/cron restart > "/dev/null" 2>&1 +} + +stop() +{ + killall -9 "UnblockNeteaseMusic" > "/dev/null" 2>&1 + + sed -i '/unblockneteasemusic-go/d' "/etc/crontabs/root" + /etc/init.d/cron restart > "/dev/null" 2>&1 + + rm -f "/tmp/unblockneteasemusic.log" + + set_type="stop" + set_ipset > "/dev/null" 2>&1 + set_hosts > "/dev/null" 2>&1 +} diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/ppp/ip-up.d/unblockneteasemusic-go b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/ppp/ip-up.d/unblockneteasemusic-go new file mode 100755 index 0000000000..e9bea88fc8 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/ppp/ip-up.d/unblockneteasemusic-go @@ -0,0 +1,4 @@ +#!/bin/sh + +sleep 10 +curl -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 music "$1}' |bash > "/dev/null" 2>&1 diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/uci-defaults/unblockneteasemusic-go b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/uci-defaults/unblockneteasemusic-go new file mode 100755 index 0000000000..b2414182f3 --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/etc/uci-defaults/unblockneteasemusic-go @@ -0,0 +1,17 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@unblockneteasemusic-go[-1] + add ucitrack unblockneteasemusic-go + set ucitrack.@unblockneteasemusic-go[-1].init=unblockneteasemusic-go + commit ucitrack + delete firewall.unblockneteasemusic-go + set firewall.unblockneteasemusic-go=include + set firewall.unblockneteasemusic-go.type=script + set firewall.unblockneteasemusic-go.path=/var/etc/unblockneteasemusic-go.include + set firewall.unblockneteasemusic-go.reload=1 + commit firewall +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/package/ctcgfw/luci-app-unblockneteasemusic-go/root/usr/share/UnblockNeteaseMusic-Go/log_check.sh b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/usr/share/UnblockNeteaseMusic-Go/log_check.sh new file mode 100755 index 0000000000..b9abe5daaa --- /dev/null +++ b/package/ctcgfw/luci-app-unblockneteasemusic-go/root/usr/share/UnblockNeteaseMusic-Go/log_check.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Created By [CTCGFW]Project OpenWRT +# https://github.com/project-openwrt + +log_max_size="4" #使用KB计算 +log_file="/tmp/unblockneteasemusic-go.log" + +(( log_size = "$(ls -l "${log_file}" | awk -F ' ' '{print $5}')" / "1024" )) +(( "${log_size}" >= "${log_max_size}" )) && echo "" > "${log_file}" + +[ "*$(uci get unblockneteasemusic-go.@unblockneteasemusic-go[0].daemon_enable)*" == "*1*" ] && { [ -z "$(ps |grep "UnblockNeteaseMusic-Go" |grep -v "grep")" ] && /etc/init.d/unblockneteasemusic-go restart; } \ No newline at end of file