|
| 1 | +<img src="https://user-images.githubusercontent.com/26399680/47980314-0e3f1700-e102-11e8-8857-e3436ecc8beb.png" alt="logo" width="140" height="140" align="right"> |
| 2 | + |
| 3 | +# UnblockNeteaseMusic |
| 4 | + |
| 5 | +解锁网易云音乐客户端变灰歌曲 |
| 6 | + |
| 7 | +## 特性 |
| 8 | + |
| 9 | +- 使用 QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咪咕 / JOOX 音源替换变灰歌曲链接 (默认仅启用一、五、六) |
| 10 | +- 为请求增加 `X-Real-IP` 参数解锁海外限制,支持指定网易云服务器 IP,支持设置上游 HTTP / HTTPS 代理 |
| 11 | +- 完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC) |
| 12 | + |
| 13 | +## 运行 |
| 14 | + |
| 15 | +使用 npx |
| 16 | + |
| 17 | +``` |
| 18 | +$ npx @nondanee/unblockneteasemusic |
| 19 | +``` |
| 20 | + |
| 21 | +或使用 Docker |
| 22 | + |
| 23 | +``` |
| 24 | +$ docker run nondanee/unblockneteasemusic |
| 25 | +``` |
| 26 | + |
| 27 | +``` |
| 28 | +$ docker-compose up |
| 29 | +``` |
| 30 | + |
| 31 | +### 配置参数 |
| 32 | + |
| 33 | +``` |
| 34 | +$ unblockneteasemusic -h |
| 35 | +usage: unblockneteasemusic [-v] [-p port] [-a address] [-u url] [-f host] |
| 36 | + [-o source [source ...]] [-t token] [-e url] [-s] |
| 37 | + [-h] |
| 38 | +
|
| 39 | +optional arguments: |
| 40 | + -v, --version output the version number |
| 41 | + -p port, --port port specify server port |
| 42 | + -a address, --address address specify server host |
| 43 | + -u url, --proxy-url url request through upstream proxy |
| 44 | + -f host, --force-host host force the netease server ip |
| 45 | + -o source [source ...], --match-order source [source ...] |
| 46 | + set priority of sources |
| 47 | + -t token, --token token set up proxy authentication |
| 48 | + -e url, --endpoint url replace virtual endpoint with public host |
| 49 | + -s, --strict enable proxy limitation |
| 50 | + -h, --help output usage information |
| 51 | +``` |
| 52 | + |
| 53 | +## 使用 |
| 54 | + |
| 55 | +**警告:本项目不提供线上 demo,请不要轻易信任使用他人提供的公开代理服务,以免发生安全问题** |
| 56 | + |
| 57 | +**若将服务部署到公网,强烈建议使用严格模式 (此模式下仅放行网易云音乐所属域名的请求) `-s` 限制代理范围 (需使用 PAC 或 hosts),~~或启用 Proxy Authentication `-t <name>:<password>` 设置代理用户名密码~~ (目前密码认证在 Windows 客户端设置和 macOS 系统设置都无法生效,请不要使用),以防代理被他人滥用** |
| 58 | + |
| 59 | +支持 Windows 客户端,UWP 客户端,Android 客户端,Linux 客户端 (1.2 版本以上需要自签证书 MITM,启动客户端需要增加 `--ignore-certificate-errors` 参数),macOS 客户端 (726 版本以上需要自签证书),iOS 客户端 (配置 https endpoint 或使用自签证书) 和网页版 (需要自签证书,需要脚本配合) |
| 60 | + |
| 61 | +目前除 UWP 外其它客户端均优先请求 HTTPS 接口,默认配置下本代理对网易云所有 HTTPS API 连接返回空数据,促使客户端降级使用 HTTP 接口 (新版 Linux 客户端和 macOS 客户端已无法降级) |
| 62 | + |
| 63 | +因 UWP 应用存在网络隔离,限制流量发送到本机,若使用的代理在 localhost,或修改的 hosts 指向 localhost,需为 "网易云音乐 UWP" 手动开启 loopback 才能使用,请以**管理员身份**执行命令 |
| 64 | + |
| 65 | +```powershell |
| 66 | +checknetisolation loopbackexempt -a -n="1F8B0F94.122165AE053F_j2p0p5q0044a6" |
| 67 | +``` |
| 68 | + |
| 69 | +### 方法 1. 修改 hosts |
| 70 | + |
| 71 | +向 hosts 文件添加两条规则 |
| 72 | + |
| 73 | +``` |
| 74 | +<Server IP> music.163.com |
| 75 | +<Server IP> interface.music.163.com |
| 76 | +``` |
| 77 | + |
| 78 | +> 使用此方法必须监听 80 端口 `-p 80` |
| 79 | +> |
| 80 | +> **若在本机运行程序**,请指定网易云服务器 IP `-f xxx.xxx.xxx.xxx` (可在修改 hosts 前通过 `ping music.163.com` 获得) **或** 使用代理 `-u http(s)://xxx.xxx.xxx.xxx:xxx`,以防请求死循环 |
| 81 | +> |
| 82 | +> **Android 客户端下修改 hosts 无法直接使用**,原因和解决方法详见[云音乐安卓又搞事啦](https://jixun.moe/post/netease-android-hosts-bypass/),[安卓免 root 绕过网易云音乐 IP 限制](https://jixun.moe/post/android-block-netease-without-root/) |
| 83 | +
|
| 84 | +### 方法 2. 设置代理 |
| 85 | + |
| 86 | +PAC 自动代理脚本地址 `http://<Server Name:PORT>/proxy.pac` |
| 87 | + |
| 88 | +全局代理地址填写服务器地址和端口号即可 |
| 89 | + |
| 90 | +| 平台 | 基础设置 | |
| 91 | +| :------ | :------------------------------- | |
| 92 | +| Windows | 设置 > 工具 > 自定义代理 (客户端内) | |
| 93 | +| UWP | Windows 设置 > 网络和 Internet > 代理 | |
| 94 | +| Linux | 系统设置 > 网络 > 网络代理 | |
| 95 | +| macOS | 系统偏好设置 > 网络 > 高级 > 代理 | |
| 96 | +| Android | WLAN > 修改网络 > 高级选项 > 代理 | |
| 97 | +| iOS | 无线局域网 > HTTP 代理 > 配置代理 | |
| 98 | + |
| 99 | +> 代理工具和方法有很多请自行探索,欢迎在 issues 讨论 |
| 100 | +
|
| 101 | +### ✳方法 3. 调用接口 |
| 102 | + |
| 103 | +作为依赖库使用 |
| 104 | + |
| 105 | +``` |
| 106 | +$ npm install @nondanee/unblockneteasemusic |
| 107 | +``` |
| 108 | + |
| 109 | +```javascript |
| 110 | +const match = require('@nondanee/unblockneteasemusic') |
| 111 | + |
| 112 | +/** |
| 113 | + * Set proxy or hosts if needed |
| 114 | + */ |
| 115 | +global.proxy = require('url').parse('http://127.0.0.1:1080') |
| 116 | +global.hosts = {'i.y.qq.com': '59.37.96.220'} |
| 117 | + |
| 118 | +/** |
| 119 | + * Find matching song from other platforms |
| 120 | + * @param {Number} id netease song id |
| 121 | + * @param {Array<String>||undefined} source support qq, xiami, baidu, kugou, kuwo, migu, joox |
| 122 | + * @return {Promise<Object>} |
| 123 | + */ |
| 124 | +match(418602084, ['qq', 'kuwo', 'migu']).then(console.log) |
| 125 | +``` |
| 126 | + |
| 127 | +## 效果 |
| 128 | + |
| 129 | +#### Windows 客户端 |
| 130 | + |
| 131 | +<img src="https://user-images.githubusercontent.com/26399680/60316017-87de8a80-999b-11e9-9381-16d40efbe7f6.png" width="100%"> |
| 132 | + |
| 133 | +#### UWP 客户端 |
| 134 | + |
| 135 | +<img src="https://user-images.githubusercontent.com/26399680/52215123-5a028780-28ce-11e9-8491-08c4c5dac3b4.png" width="100%"> |
| 136 | + |
| 137 | +#### Linux 客户端 |
| 138 | + |
| 139 | +<img src="https://user-images.githubusercontent.com/26399680/60316169-18b56600-999c-11e9-8ae5-5cd168b0edae.png" width="100%"> |
| 140 | + |
| 141 | +#### macOS 客户端 |
| 142 | + |
| 143 | +<img src="https://user-images.githubusercontent.com/26399680/52196035-51418f80-2895-11e9-8f33-78a631cdf151.png" width="100%"> |
| 144 | + |
| 145 | +#### Android 客户端 |
| 146 | + |
| 147 | +<img src="https://user-images.githubusercontent.com/26399680/57972549-eabd2900-79ce-11e9-8fef-95cb60906298.png" width="50%"> |
| 148 | + |
| 149 | +#### iOS 客户端 |
| 150 | + |
| 151 | +<img src="https://user-images.githubusercontent.com/26399680/57972440-f90a4580-79cc-11e9-8dbf-6150ee299b9c.jpg" width="50%"> |
| 152 | + |
| 153 | +## 致谢 |
| 154 | + |
| 155 | +感谢大佬们为逆向 eapi 所做的努力 |
| 156 | + |
| 157 | +使用的其它平台音源 API 出自 |
| 158 | + |
| 159 | +[trazyn/ieaseMusic](https://github.com/trazyn/ieaseMusic) |
| 160 | + |
| 161 | +[listen1/listen1_chrome_extension](https://github.com/listen1/listen1_chrome_extension) |
| 162 | + |
| 163 | +向所有同类项目致敬 |
| 164 | + |
| 165 | +[EraserKing/CloudMusicGear](https://github.com/EraserKing/CloudMusicGear) |
| 166 | + |
| 167 | +[EraserKing/Unblock163MusicClient](https://github.com/EraserKing/Unblock163MusicClient) |
| 168 | + |
| 169 | +[ITJesse/UnblockNeteaseMusic](https://github.com/ITJesse/UnblockNeteaseMusic/) |
| 170 | + |
| 171 | +[bin456789/Unblock163MusicClient-Xposed](https://github.com/bin456789/Unblock163MusicClient-Xposed) |
| 172 | + |
| 173 | +[YiuChoi/Unlock163Music](https://github.com/YiuChoi/Unlock163Music) |
| 174 | + |
| 175 | +[yi-ji/NeteaseMusicAbroad](https://github.com/yi-ji/NeteaseMusicAbroad) |
| 176 | + |
| 177 | +[stomakun/NeteaseReverseLadder](https://github.com/stomakun/NeteaseReverseLadder/) |
| 178 | + |
| 179 | +[fengjueming/unblock-NetEaseMusic](https://github.com/fengjueming/unblock-NetEaseMusic) |
| 180 | + |
| 181 | +[acgotaku/NetEaseMusicWorld](https://github.com/acgotaku/NetEaseMusicWorld) |
| 182 | + |
| 183 | +[mengskysama/163-Cloud-Music-Unlock](https://github.com/mengskysama/163-Cloud-Music-Unlock) |
| 184 | + |
| 185 | +[azureplus/163-music-unlock](https://github.com/azureplus/163-music-unlock) |
| 186 | + |
| 187 | +[typcn/163music-mac-client-unlock](https://github.com/typcn/163music-mac-client-unlock) |
| 188 | + |
| 189 | +## 许可 |
| 190 | + |
| 191 | +The MIT License |
0 commit comments