一键脚本获取本机 IP 以及用gh-proxy访问 Github 的通道
经常在各TG群里看到各种一键脚本用户有检测IP与域名解析不匹配的反馈
这样的原因 常常是因为 脚本中检测IP的方法失效了.
在 233boy 的群中受到启发.
我有一个想法. 对各脚本的作者发起一个倡议, 使用统一的 本机IP 的变量名.
_FQ_IP_
使用统一的IP栈变量名. 值为4表示使用IPv4, 值为6表示使用IPv6.
_FQ_NET_STACK_
在脚本中, 检测本机IP之前, 先判断这个环境变量是否为空. 环境变量非空, 则不检测本机IP. 示例,
get_ip() {if [[ -z $_FQ_IP_ ]]; thenif [[ $_FQ_NET_STACK_ == "4" ]]; then_FQ_IP_=$(curl -4s https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K\S+")[[ -z $_FQ_IP_ ]] && echo -e "\n 检测本机IP失败\n" && exitelif [[ $_FQ_NET_STACK_ == "6" ]]; then_FQ_IP_=$(curl -6s https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K\S+")[[ -z $_FQ_IP_ ]] && echo -e "\n 检测本机IP失败\n" && exitelse_FQ_IP_=$(curl -s https://www.cloudflare.com/cdn-cgi/trace | grep -oP "ip=\K\S+")[[ -z $_FQ_IP_ ]] && echo -e "\n 检测本机IP失败\n" && exitfifi}
检测IP的具体方法, 欢迎大家在评论区交流.
关于IP栈使用IPv4 还是 IPv6. 我推荐, 检测用户输入的域名解析到了IPv4 还是 IPv6. 示例:
get_domain_resolve() {_FQ_NET_STACK_=""domain_resolve=$(curl -sH 'accept: application/dns-json' "https://cloudflare-dns.com/dns-query?name=$domain&type=A" | jq -r '.Answer[0].data')if [[ "$domain_resolve" != "null" ]]; then_FQ_NET_STACK_="4"elsedomain_resolve=$(curl -sH 'accept: application/dns-json' "https://cloudflare-dns.com/dns-query?name=$domain&type=AAAA" | jq -r '.Answer[0].data')if [[ "$domain_resolve" != "null" ]]; then_FQ_NET_STACK_="6"fifi}
这个方案也欢迎大家在评论区交流意见.
这样的话, 即使这个脚本没有人维护了, 脚本中的检测IP的功能失效了. 使用者也只要简单地在使用前指定一下本机IP的变量即可让脚本顺利执行.
export _FQ_IP_=VPS的本机IP
原来的一键脚本
如果面对一个不知道查看本机IP的超级小白, 也可以告诉TA这样. TA只管复制粘贴就行了.
export _FQ_IP_=$(检测本机IP的命令)
原来的一键脚本
========
在一些奇怪的纯IPv6的VPS上, 以及墙内的VPS上, 访问不通Github. 不管是拉Github的脚本, 还是在脚本中拉Github的资源, 都会有麻烦.
推荐使用gh-proxy, 并同时对脚本内容进行处理, 在脚本中访问Github资源, 也加上gh-proxy来调用.
墙内的话, 可以使用自定义域名的Cloudflare worker. 示例:
bash <(wget -qO- -o- https://ghproxy.agrayman.gay/https://git.io/v2ray.sh | perl -pe "s#(http.*?git[^/]*?/)#https://ghproxy.agrayman.gay/\1#g")
如果在Github脚本中, 还嵌套调用了Github脚本, 而在下一层的Github脚本中, 有可能还会访问Github资源. 那么请使用如下递归处理的方式:
bash <(wget -qO- -o- https://ghproxy.agrayman.gay/https://git.io/v2ray.sh | perl -pe "$(curl -L https://ghproxy.agrayman.gay/perl-pe-para)")
当然第二种方案, 对嵌套调用Github脚本的方式有要求, 只能处理类似如下方式的调用
bash <(curl .... sh) 或 bash <(wget .... sh)
演示站: https://ghproxy.agrayman.gay/
第二种方案的原理, 请见
https://zelikk.blogspot.com/2023/02/freevpsvc-github-githubproxy-sed.html
https://zelikk.blogspot.com/2023/03/sed-perl-no-greedily.html
https://zelikk.blogspot.com/2023/07/github-proxy-gitio.html
自己在worker搭建gh-proxy的教程:
https://zelikk.blogspot.com/2023/06/gh-proxy-worker.html
========
不方便在 blogspot 留言的朋友, 也可以在这个论坛留言. https://www.nodeseek.com/post-57601-1
评论
发表评论