[ English follows Chinese ]
此工具帮助Mac/Linux网易云音乐的海外用户解除歌曲锁区限制(所谓锁区:很多歌曲仅限大陆地区播放)。
对用户比较友好。
为什么不使用Unblock-Youku等通用的反向代理解决方案?因为:
不同OS下的类似工具的评论区经常出现“买个会员不就好了”等言论,注意:
感谢一个Windows下类似工具提供的思路以及作者的博文。
此工具的使用、传播、修改均无需征得作者同意,同时作者对此不负一切责任。
需要条件:
pip install twisted requests pyquery --user
进入文件夹,双击NeteaseMusicHelper
来启动网易云音乐。提示成功之后按任意键关闭终端窗口,然后开心听歌,不用善后。
vim /usr/share/applications/netease-cloud-music.desktop
修改Exec变量为:
Exec=/bin/bash -c "unset SESSION_MANAGER && netease-cloud-music %U & cd __YOUR_PATH_TO_NeteaseMusicHelper__ && ./NeteaseMusicHelper"
以后只需正常从桌面图标启动网易云音乐即可。
* 为什么要unset SESSION_MANAGER
?详见这里
运行之后无效怎么办?
python -c "import twisted; import requests; import pyquery; exit"
python NeteaseMusicProxy.py
将输出贴在issue里,并标明网络环境(Wi-Fi/有线网络等)使用Python 3的话需要怎么做?
pip
安装则查看pip -V
,等等)python -V
提示版本在3以上,直接正常使用即可;否则, 将run_*.sh
里面的python
替换为你的python3
年费会员;
未测试任何其他情况,欢迎测试报bug谢谢。
见下方Inplementation details。这里只说两点:
This tool helps abroad users of macOS/Linux NeteaseMusic unblock songs that are allowed to play in mainland China only.
Why general solutions like Unblock-Youku are not recommended? Because:
Thanks to a similar tool NeteaseReverseLadder on Windows and the author's blog.
Copyright: The author waives all rights, please feel free to use, share and modify this tool.
Prerequisites:
pip install twisted requests pyquery --user
Enter the folder and double-click NeteaseMusicHelper
to launch NeteaseMusic. See the success info and then press any key to close it, enjoy your music.
Do this at the first time:
vim /usr/share/applications/netease-cloud-music.desktop
Change "Exec" variable to Exec=/bin/bash -c "unset SESSION_MANAGER && netease-cloud-music %U & cd __YOUR_PATH_TO_NeteaseMusicHelper__ && ./NeteaseMusicHelper"
Then enjoy NeteaseMusic by simply clicking its desktop icon from now on.
Not working?
python -c "import twisted; import requests; import pyquery; exit"
python NeteaseMusicProxy.py
and paste the output to your issue, also report your network type (e.g. Wi-Fi/Ether)What if using Python 3?
pip -V
)python -V
return version > 3, do nothing; Otherwise, replace python
in run_*.sh
to python3
Yearly-paid membership;
Other cases are not tested and your report is welcomed.
Part 1. Force NeteaseMusic to communicate with Netease servers through local proxy.
Methods that I tried:
pfctl
(package forwarding), like iptables
on Linux. Not working normally & too less helpful documentations, given up.networksetup
, macOS network PAC. It works easily.Finally I chose gsettings
tool provided by GNOME for redirecting traffics because root privilege won't be needed.
iptables
can also do the job:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A OUTPUT -p tcp -d music.163.com -j REDIRECT --to-ports 32794
but requires to fix redirection-modified request headers. Target parameter TPROXY
instead of REDIRECT
is actually built for this, however we have another problem unsolved in our case: How to let locally generated packets pass through PREROUTING chain?
Part 2. Intercept, modify and redirect requests.
See NeteaseMusicProxy.py
(deployed as local proxy) and AudioRequestProxy.py
(deployed as default mainland proxy).
Mainland proxy server is dynamically selected from http://cn-proxy.com/. Because those proxies can be unstable (may be refused by NeteaseMusic server), so an auto proxy selector will replace current proxy with new one or default one after a certain amount of request failures.