解锁网易云音乐客户端变灰歌曲
- 使用网易云旧链 / QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咕咪 / JOOX 音源替换变灰歌曲链接 (默认仅启用前四)
- 为请求增加
X-Real-IP
参数解锁海外限制,支持指定网易云服务器 IP,支持设置上游 HTTP / HTTPS 代理 - 完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC)
从源码运行
$ node app.js
或使用 Docker
$ docker run nondanee/unblockneteasemusic
$ docker-compose up
$ node app.js -h
usage: unblockneteasemusic [-v] [-p port] [-u url] [-f host]
[-o source [source ...]] [-t token] [-s] [-h]
optional arguments:
-v, --version output the version number
-p port, --port port specify server port
-u url, --proxy-url url request through upstream proxy
-f host, --force-host host force the netease server ip
-o source [source ...], --match-order source [source ...]
set priority of sources
-t token, --token token set up http basic authentication
-s, --strict enable proxy limitation
-i inject, --inject-url inject https proxy url
-h, --help output usage information
警告:本项目不提供线上 demo,请不要轻易信任使用他人提供的公开代理服务,以免发生安全问题
若将服务部署到公网,强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) -s
限制代理范围 (需使用 PAC 或 hosts),或启用 Proxy Authentication (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效,请不要使用),以防代理被他人滥用-t <name>:<password>
设置代理用户名密码
支持 Windows 客户端,UWP 客户端,Linux 客户端 (1.2 版本以上需要自签证书 MITM,启动客户端需要增加 --ignore-certificate-errors
参数),macOS 客户端 (726 版本以上需要自签证书),Android 客户端和网页版 (需要自签证书,需要脚本配合)
目前除 UWP 外其它客户端都优先请求 HTTPS 接口,默认配置下本代理对网易云所有 HTTPS API 连接返回空数据,促使客户端降级使用 HTTP 接口 (新版 Linux 客户端和 macOS 客户端已无法降级)
测试发现 iOS 客户端设置 WLAN 代理有效果 (HD 版不行),虽 Apple 强制要求使用 HTTPS 但 API 请求仍可以降级,不过播放音源地址需要 HTTPS,因此需要一个有可信任证书的 (公网) HTTPS 接口来转发流量,设置代理无法直接使用 (其它项目有提到使用 Surge,Shadowrocket 可以直接转发 HTTPS 流量到 HTTP,有兴趣可以试试)
iOS 食用指南
- 启动服务
node app.js -i https://<转发音源的域名>
- 配置 Nginx 转发音源
server {
listen 443;
server_name your_domain;
ssl on;
ssl_certificate 1_your_domain_bundle.crt; # 改为自己申请得到的 crt 文件的名称
ssl_certificate_key 2_your_domain.key; # 改为自己申请得到的 key 文件的名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080; # 代理到 Unblock 服务地址
}
}
- 下载 Shadowrocket 并配置 Unblock 代理
- 右上角加号添加节点
- 类型选择 HTTP
- 服务器填写你的服务器公网IP
- 端口填写你启动服务的端口号(默认为 8080)
- 然后底部找到配置 点击本地文件-编辑配置
- 添加三条规则 选项选择你刚刚添加的节点
USER-AGENT
:NeteaseMusic*
DOMAIN-SUFFIX
:163.com
DOMAIN-SUFFIX
:126.com
向 hosts 文件添加两条规则
<Server IP> music.163.com
<Server IP> interface.music.163.com
使用此方法必须监听 80 端口
-p 80
若在本机运行程序,请指定网易云服务器 IP
-f xxx.xxx.xxx.xxx
(可在修改 hosts 前通过ping music.163.com
获得) 或 使用代理-u http(s)://xxx.xxx.xxx.xxx:xxx
,以防请求死循环Android 客户端下修改 hosts 无法使用,原因和解决方法详见云音乐安卓又搞事啦,安卓免 root 绕过网易云音乐 IP 限制
PAC 自动代理脚本地址
http://<Server Name:PORT>/proxy.pac
全局代理地址填写服务器地址和端口号即可
平台 | 基础设置 (工具/方法有很多请自行探索) |
---|---|
Windows | 设置 > 工具 > 自定义代理 (客户端内) |
UWP | Windows 设置 > 网络和 Internet > 代理 |
Linux | 系统设置 > 网络 > 网络代理 |
macOS | 系统偏好设置 > 网络 > 高级 > 代理 |
Android | WLAN > 修改网络 > 高级选项 > 代理 |
iOS | Surge,Shadowrocket 等添加配置 |
UWP 应用需要开启 loopback 才能使用系统代理,请以管理员身份执行命令
checknetisolation loopbackexempt -a -n="1F8B0F94.122165AE053F_j2p0p5q0044a6"
作为依赖库使用
const match = require('./UnblockNeteaseMusic')
/**
* Set proxy or hosts if needed
*/
global.proxy = require('url').parse('http://127.0.0.1:1080')
global.hosts = {'i.y.qq.com': '59.37.96.220'}
/**
* Find matching song from other platforms
* @param {Number} id netease song id
* @param {Array<String>||undefined} source support netease, qq, xiami, baidu, kugou, kuwo, migu, joox
* @return {Promise<Object>}
*/
match(557581404, ['netease', 'qq', 'xiami', 'baidu']).then(song => console.log(song))
感谢大佬们为逆向 eapi 所做的努力
使用的其它平台音源 API 出自
listen1/listen1_chrome_extension
向所有同类项目致敬
EraserKing/Unblock163MusicClient
bin456789/Unblock163MusicClient-Xposed
fengjueming/unblock-NetEaseMusic
mengskysama/163-Cloud-Music-Unlock
typcn/163music-mac-client-unlock
The MIT License