luci-app-unblockneteasemusic-go: add luci support for UnblockNeteaseMusic-Go

This commit is contained in:
CN_SZTL 2019-12-28 18:52:05 +08:00
parent a563e51aa9
commit 44b6c7527f
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
10 changed files with 299 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,51 @@
mp = Map("unblockneteasemusic", translate("解除网易云音乐播放限制"))
mp.description = translate("原理:采用 [酷我/酷狗/咕咪] 音源,替换网易云音乐 无版权/收费 歌曲链接<br/>具体使用方法参见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

View File

@ -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

View File

@ -0,0 +1,22 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(3, '<%=url([[admin]], [[services]], [[unblockneteasemusic-go]], [[status]])%>', null,
function(x, data) {
var tb = document.getElementById('unblockneteasemusicgo_status');
if (data && tb) {
if (data.running) {
var links = '<em><b><font color=green>UnblockNeteaseMusic-Go <%:RUNNING%></font></b></em>';
tb.innerHTML = links;
} else {
tb.innerHTML = '<em><b><font color=red>UnblockNeteaseMusic-Go <%:NOT RUNNING%></font></b></em>';
}
}
}
);
//]]>
</script>
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
<fieldset class="cbi-section">
<p id="unblockneteasemusicgo_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View File

@ -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'

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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; }