Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

功能建议 #7

Closed
YujiaCheng1996 opened this issue Nov 10, 2020 · 48 comments
Closed

功能建议 #7

YujiaCheng1996 opened this issue Nov 10, 2020 · 48 comments
Labels
功能建议 功能与建议

Comments

@YujiaCheng1996
Copy link

YujiaCheng1996 commented Nov 10, 2020

强迫症患者想要实现完全的自动化,但ip最后一位完全一致,外加输出的结果可能带宽并不算高,还需要手工筛选甚至ip不足要再次运行,能否实现以下功能:

  1. 随机生成ip地址最后一位
  2. 筛选出给定数量高质量的(如30个延迟300ms内,带宽8M以上)仅输出ip

这样结果就是确定数目的高质量纯ip,后续无论paste为hosts还是sed到adguardhome等里面去都方便了

@XIU2
Copy link
Owner

XIU2 commented Nov 10, 2020

  1. IP最后一段完全随机是可以实现的(改几行代码的事)。
  2. 这个就需要考虑考虑怎么设计了。

@iamgit66
Copy link

从近一个多月来的使用和观察,cf的ip,在晚上8点至12点高峰期,是不稳定的,0点至下午5点,这段时间测速的得到的IP是稳定的。我的脚本是晚上8点至11点,每一小时测速一次,取最快的IP。在三个地区不同电信运营商,同时测速,证明相同IP在不同运营商的速度也是不同的。

@XIU2
Copy link
Owner

XIU2 commented Nov 10, 2020

我先把 [完全随机 IP 最后一段] 更新了吧,不过我发现因为完全随机,导致长度不稳定,最后输出结果就无法对齐了,强迫症很难受,我先研究下如何彻底对齐。。。

@XIU2
Copy link
Owner

XIU2 commented Nov 10, 2020

@YujiaCheng1996 v1.3.2 版本已经支持 IP 最后一段完全随机了(不再统一指定,每个 IP 都独立随机)。

至于第二个功能需求,我觉得这个可能更适合外部程序读取结果文件筛选处理

之所以测速后会输出测速结果文件,就是因为每个人的需求不同,对于个性化的需求,大家可以对其进一步筛选处理

@eightsheep67
Copy link

还有一个建议,能否在目录下没有ip.txt,或者没有指定参数的情况下,自动下载cloudflare的所有ip段生成ip.txt

@XIU2
Copy link
Owner

XIU2 commented Nov 10, 2020

@eightsheep67 没有这个必要,Cloudflare IP 段是几乎固定的,这几年我看都没变化(毕竟 IPv4 已经枯竭了,现在的 Cloudflare 也只是在扩充服务器和宽带)。对于可能最少几年才会变动的 IP 段数据,没必要动态获取。

@XIU2 XIU2 added the 功能建议 功能与建议 label Nov 11, 2020
@iamgit66
Copy link

ip.txt我只保留104的网段,其他网段不测试。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@iamgit66 确实测速结果里绝大部分都是 104 172 162,主要是因为这三个 IP 段就占了 Cloudflare 绝大部分 IP 。

@YujiaCheng1996
Copy link
Author

@YujiaCheng1996 v1.3.2 版本已经支持 IP 最后一段完全随机了(不再统一指定,每个 IP 都独立随机)。

至于第二个功能需求,我觉得这个可能更适合外部程序读取结果文件筛选处理

之所以测速后会输出测速结果文件,就是因为每个人的需求不同,对于个性化的需求,大家可以对其进一步筛选处理

csv也好处理,就是会有一个问题:
我想要获取30个优质ip,设置执行测速50个ip后,筛查发现优质的不足30个,需要再跑一遍。如果直接测速100个速度慢,并且可能依旧不足30个或是多出许多浪费了。
如果程序不停测试直至满足指定个优质ip而不是只测指定个不管好坏会好一些,不懂go应该也就是修改为循环+判断break的事。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 一定要 30个么(10个和30个有什么区别),如果 Cloudflare 高峰期国内网络质量不佳,永远凑不够呢。

最优质的 IP 绝大部分都集中在前几百个 IP 中(后面的不是延迟过高就是有丢包,只要有丢包速度绝对不稳定),虽然延迟低 ≠ 速度快,但是延迟低=线路好(仅限 TCP 测试结果),出现速度快的几率更高。

目前程序是先延迟测速,然后筛选+排序,再根据延迟顺序进行下载测速,最后显示前20个,并输出到文件。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 思考了下,你要的功能是可以实现的。

在循环下载测速时,指定一个足够大的循环次数(原本是下载测速数量),然后每次下载测速完成后,判断一下速度和延迟是否同时满足要求,如果满足则 计数变量+1,当该计数变量=30 时,跳出下载测速循环。

你没说是要直接显示结果,还是输出到文件里。

如果是输出到文件里,那么这样就行了。
如果是直接显示结果,那么还需要添加一个数组变量用来在每次 计数变量+1 时,将符合条件的 IP 数组复制一份到新数组变量中。
然后最后显示结果的时候就显示这个数组变量中的 IP 数据。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 我需要更详细的功能需求描述,来决定该功能最后是什么样。

@YujiaCheng1996
Copy link
Author

YujiaCheng1996 commented Nov 11, 2020

@YujiaCheng1996 思考了下,你要的功能是可以实现的。

在循环下载测速时,指定一个足够大的循环次数(原本是下载测速数量),然后每次下载测速完成后,判断一下速度和延迟是否同时满足要求,如果满足则 计数变量+1,当该计数变量=30 时,跳出下载测速循环。

你没说是要直接显示结果,还是输出到文件里。

如果是输出到文件里,那么这样就行了。
如果是直接显示结果,那么还需要添加一个数组变量用来在每次 计数变量+1 时,将符合条件的 IP 数组复制一份到新数组变量中。
然后最后显示结果的时候就显示这个数组变量中的 IP 数据。

不了解go的代码。
输出不能也实时输出到控制台吗,C类的都是printf就输出了,js也是console.log。
每当满足条件,count++ ,并输出到终端和文件,对齐用Tab就行了,无需再用数组存储到内存吧。
不管如何,终端输出是无所谓的,后续我再写个shell脚本操作csv就行了。
另外如果测到后面ip不够能够return个1,这样方便shell读取$?。

我的需求是:
1.我有一个需要加速的cf域名列表,一行一个存为domains.txt,个数/行数可以通过wc -l domains.txt取得。
2.执行本项目,得到对应数目的ip并能判断是否成功获取足量ip。
比如判断返回值为1则失败,不返回也行,wc -l result.csv 小于数目也即失败。
3.判断失败可再次运行或取消执行,判断成功则分离出纯ip列表ips.txt。
再paste ips.txt domains.txt 即可合成hosts文件,替换本机hosts或作为adguardhome的上游等用途多多。

部分用户可能是为了加速自己域名对外访问,拿到ip去更新dns,这样也用不到这么多ip,2、3个已经够多了,但也是只要筛选出高质量ip,至于真实的丢包率和带宽也许并不关心。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 在循环下载测速时,每次下载测速完成后,判断一下速度和延迟是否同时满足要求,如果满足则 计数变量+1 并输出到控制台,当该 计数变量=30 时,则跳出下载测速循环,最后输出这 30个结果到文件。

@YujiaCheng1996
Copy link
Author

YujiaCheng1996 commented Nov 11, 2020

@YujiaCheng1996 在循环下载测速时,每次下载测速完成后,判断一下速度和延迟是否同时满足要求,如果满足则 计数变量+1 并输出到控制台,当该 计数变量=30 时,则跳出下载测速循环,最后输出结果到文件(依然是完整数据,只不过里面包含了满足你要求的 IP 数据)。

频繁写文件/输出终端会慢,这样一次性写更好,开个新数组存就完了,终端也能一次性输出。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 突然想起来我用到了进度条,这样是没办法在测速循环中输出结果到终端的(会导致进度条换行)。
最后一个问题,输出文件是只输出这 30个?还是完整数据?

@YujiaCheng1996
Copy link
Author

YujiaCheng1996 commented Nov 11, 2020

@YujiaCheng1996 突然想起来我用到了进度条,这样是没办法在测速循环中输出结果到终端的(会导致进度条换行)。
最后一个问题,输出文件是只输出这 30个?还是完整数据?

存数组最后一次性输出就完了,用不了多少内存,但经过我强迫症分析,由于300M的文件下载10M宽带也要30s,因为文件读写/终端输出的耗时可以忽略,所以这个内存理论可以省。
个人认为,低质量ip的显示输出用处不大,不知道除了cloudflare的运维还有什么需求要去查看低质量ip的数据,也可以保留results.csv的基础上单独输出纯ip列表ips.txt。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 目前软件是默认 5秒 的下载测速时间,也就是到了 5秒,不管是否下载完成都会终止,因为软件下载测速是通过时间分片来计算下载速度的(下载大小/5秒),所以如果网速太快提前下载完成,就会导致测速结果偏低。

所以我最后定了个 300MB 文件 + 5 秒时间,这样除非下载速度达到 60MB/s(500M宽带),否则是够用了。
之所以不把文件搞得更大,主要是担心 Cloudflare 流量跑太多(主要是网上查的有说跑到多少流量会让你付费,也有说真·无限流量的,我也无法判断)。

毕竟官方下载测速地址,都特么能被跑出资源超出限制提示。。。

@YujiaCheng1996
Copy link
Author

@YujiaCheng1996 目前软件是默认 5秒 的下载测速时间,也就是到了 5秒,不管是否下载完成都会终止,因为软件下载测速是通过时间分片来计算下载速度的(下载大小/5秒),所以如果网速太快提前下载完成,就会导致测速结果偏低。

这我就不懂了,是不是要指定足够大的文件或者获取到真实的下载耗时?

@YujiaCheng1996
Copy link
Author

YujiaCheng1996 commented Nov 11, 2020

@YujiaCheng1996 目前软件是默认 5秒 的下载测速时间,也就是到了 5秒,不管是否下载完成都会终止,因为软件下载测速是通过时间分片来计算下载速度的(下载大小/5秒),所以如果网速太快提前下载完成,就会导致测速结果偏低。

所以我最后定了个 300MB 的文件+5秒时间,这样除非下载速度达到 60MB/s,否则是足够了。
之所以不把文件搞得更大,主要是担心 Cloudflare 流量跑太多(主要是网上查的有说跑到多少流量会让你付费,也有说真·无限流量的,我也无法判断)。

可以自己注册个临时邮箱再建worker,不绑支付方式怎么扣钱?封号大不了重新注册个。
当然,不建议滥用;)

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 你只需要知道,可以用下载测速数量 × 5 得到实际需要的时间(秒,可能会有些许误差)。
好了,我去撸代码了,业余选手继续面向百度/谷歌编程去了~

@YujiaCheng1996
Copy link
Author

又突发奇想了。
可以指定n个测试地址,在循环时通过 i%n 选择地址测试。
我就是这么一想,又要多写一堆代码不要打我。。。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 这个没有必要,等到真的出现 Cloudflare 流量上限的问题时在考虑也不迟。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@YujiaCheng1996 v1.3.4 版本支持了,你去试试看吧。

# 指定测速条件,延迟时间上限:200 ms,下载速度下限:0 MB/s,数量:10 个(只有同时满足三个条件时才会停止测速)
CloudflareST.exe -tl 200 -dn 10

# 指定测速条件,延迟时间上限:0 ms,下载速度下限:5 MB/s,数量:10 个(只有同时满足三个条件时才会停止测速)
CloudflareST.exe -sl 5 -dn 10

# 指定测速条件,延迟时间上限:200 ms,下载速度下限:5 MB/s,数量:10 个(只有同时满足三个条件时才会停止测速)
CloudflareST.exe -tl 200 -sl 5 -dn 10

如果一直凑不够指定数量,会一直测速下去。
建议指定下载速度下限时,也指定延迟时间上限,如果测试到指定延迟还没凑够数,就会终止测速。

如果一个满足条件的 IP 都没有,那么就会正常输出结果(和不指定条件一样)。
如果你需要通过外部程序进一步筛选处理,那么只需要判断测速结果数量,如果上千个说明一个满足条件的 IP 都没有。

这么简单的功能,我特么写了半天,毕竟是业余自学水平。。。一边查一边写,基础不牢固,走了好些弯路。。。

@eightsheep67
Copy link

进度条在改变窗口大小的时候,会换行。。。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@eightsheep67 这种小问题无关紧要,毕竟是控制台输出,而且这种问题解决起来比较麻烦。

@eightsheep67
Copy link

现在下载测速里有3379个待测速,是测出满足我需要的IP数量后就会直接导出吧?不需要全部测完吧?测了好久还没有结束,我这边5MB/s的速度都达不到么……

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@eightsheep67 达到你设定的条件后就停止测速了(找到足够的 IP)。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@eightsheep67 半夜高峰期,速度普遍比较慢,你不设定条件测试看看速度如何。
你现在用的参数是什么?

@eightsheep67
Copy link

-t 4 -dt 5 -sl 5 -dn 6 ,留前面两个参数是方便随时更改,现在测了191个,还没有找到我需要的6个……

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@eightsheep67

看了下发现,现在属于高峰期最严重的时候,测速结果连个 1MB/s 的都很少见,所以你怕是测试完都找不到一个 5MB/s 的了。

另外,我发现我前面发布新版本时说的内容有歧义(当时建议仅指定下载速度下限),就重新改了一下:

如果一直凑不够指定数量,会一直测速下去。
建议指定下载速度下限时,也指定延迟时间上限,如果测试到指定延迟还没凑够数,就会终止测速。

如果一个满足条件的 IP 都没有,那么就会正常输出结果(和不指定条件一样)。
如果你需要通过外部程序进一步筛选处理,那么只需要判断测速结果数量,如果上千个说明一个满足条件的 IP 都没有。


另外我发现一个不算问题的问题,那就是下载速度下限不支持设定小数(比如 0.5 MB/s),虽然我觉得可能很少会有人去设定这么小的值,所以叫做不算问题的问题。

@XIU2
Copy link
Owner

XIU2 commented Nov 11, 2020

@eightsheep67

随便指定了个延迟上限,结果还真找到了一个(180ms 延迟内只有一个超过 5MB/s 的)。。。

D:\Program Files\CloudflareST>CloudflareST.exe -t 4 -dt 5 -sl 5 -dn 6 -tl 180
# XIU2/CloudflareSpeedTest v1.3.4

开始延迟测速(模式:TCP,端口:443):
27920 / 27920 [-----------------------------------------------------------------------------------------------] 100.00%
开始下载测速(延迟时间上限:180 ms,下载速度下限:5 MB/s):
17 / 3455 [>____________________________________________________________________________________________________] 0.49%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.27.207.146    4       4       0.00    174.72    6.80

完整测速结果已写入 result.csv 文件,请使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。

@eightsheep67
Copy link

羡慕网速,我真的后悔从联通改用电信了……同样200M,联通就是比电信好……

@YujiaCheng1996
Copy link
Author

YujiaCheng1996 commented Nov 12, 2020

给个示例吧,仅linux/mac:

#!/bin/sh
let domian_count=`sed -n '$=' cf-domains.txt`
echo "共有${domian_count}个域名"
./CloudflareST -tl 200 -sl 5 -dn $domian_count
let result_count=`sed -n '$=' result.csv`
let result_count=result_count-1
if [ $domian_count -eq $result_count ]
then
    echo "测出全部${domian_count}个ip"
    cp hosts.bak hosts
    awk -F, 'NR==FNR{a[NR-1]=$1}NR!=FNR{print a[FNR]"\t"$1}' result.csv cf-domains.txt >> hosts
elif [ $domian_count -gt $result_count ]
then
    echo "只测出${result_count}个ip"
    cp hosts.bak hosts
    awk -F, -v ipcount="$result_count" 'NR==FNR{a[NR-1]=$1}NR!=FNR{print a[FNR%ipcount+1]"\t"$1}' result.csv cf-domains.txt >> hosts
else
    echo "未测出任何ip"
    exit 1
fi

功能为根据域名列表在当前目录生成hosts。
./CloudflareST后参数自行调整。
可增加后续操作,替换系统hosts需root权限,位置依系统不同,并需重启network等服务后生效,服务器慎用,需自行编写。
若要有更新失败通知等处理,在else后添加。

在程序目录下添加3个文件:

  1. cf-domains.txt:
    为cf加速的域名列表,一行一个,注意不要有空行。
    形如:
    www.cloudflare.com
    developers.cloudflare.com
    ajax.cloudflare.com
    cdnjs.cloudflare.com
    dash.cloudflare.com
    api.cloudflare.com

  2. hosts.bak:
    为备份目前系统的hosts或是前序生成的hosts,以及存放一些其他有用的条目。
    形如:
    127.0.0.1 localhost

以上2个文件都不要出现hosts不支持的*等特殊符号

  1. xx.sh:
    保存以上脚本并执行chmod +x xx.sh

之后在corntab等处设置定时运行。

@YujiaCheng1996
Copy link
Author

除了可能出现的限速问题,本项目已经趋近完美了。

@XIU2
Copy link
Owner

XIU2 commented Nov 12, 2020

@YujiaCheng1996 昨天更新的指定延迟、速度条件功能用着怎么样?有没有什么 BUG,或者使用上的不协调?

@YujiaCheng1996
Copy link
Author

@YujiaCheng1996 昨天更新的指定延迟、速度条件功能用着怎么样?有没有什么 BUG,或者使用上的不协调?

完美!

@XIU2
Copy link
Owner

XIU2 commented Nov 12, 2020

@YujiaCheng1996 至于未来可能出现的 Cloudflare 流量上限问题,短时间内不需要担心,因为现在用我这个软件的人太少。。。

Cloudflare 后台可以看到统计信息(测速文件访问请求),每天也才一百多人在使用、几十 GB 的缓存流量消耗。。。

@YujiaCheng1996
Copy link
Author

@YujiaCheng1996 至于未来可能出现的 Cloudflare 流量上限问题,短时间内不需要担心,因为现在用我这个软件的人太少。。。

Cloudflare 后台可以看到每天有多少个测速请求(访问请求),每天也才一百多人在使用。。。

最初是52pojie那过来的,大佬的bt traker列表早早就一直在用,多多宣传啊。

@XIU2
Copy link
Owner

XIU2 commented Nov 12, 2020

@YujiaCheng1996 Tracker 项目我早期宣传过后,已经不需要我再去主动宣传了,很多人已经自行帮我宣传了。。。

而这个项目,主要是使用群体太小众了,宣传都不知道去哪里宣传(只在吾爱论坛、知乎发过帖)。。。

@YujiaCheng1996
Copy link
Author

@YujiaCheng1996 Tracker 项目我早期宣传过后,已经不需要我再去主动宣传了,很多人已经自行帮我宣传了。。。

而这个项目,主要是使用群体太小众了,宣传都不知道去哪里宣传(只在吾爱论坛、知乎发过帖)。。。

目前我猜猜用户群体是没有科学上网但需要加速cf服务的用户或是用cf建站需要加速国内体验的站长,确实小众。

@XIU2
Copy link
Owner

XIU2 commented Nov 12, 2020

@YujiaCheng1996 没办法,因为我学编程的目的就是为了解决我个人产生的需求(业余自学,自给自足),而因为只是我个人需求(而不是针对性的大众需求),所以导致我写出来的项目(软件、工具、脚本)等乱七八糟的往往也很小众。。。

我可能已经习惯了在我的日常生活中寻找各种各样的需求,来为我提供写软件、脚本等项目的灵感

@iamgit66
Copy link

之前没有arm64版本时,代替方案是这里https://tools.lzc256.com/lzccfnode/,取20个左右再测速,效果比较一般。
使用CloudflareST情况,在垃圾移动宽带,随便都能取得10MB/s的IP,已到达宽带上限(100M移动宽带),晚上8-10高峰期也能获得4MB左右的IP。电信500M宽带,优质IP在4-5MB/s,大多情况在3-4M/s。联通100M宽带,优质IP在3MB/s左右。
使用2个月左右的观察结果。

@XIU2
Copy link
Owner

XIU2 commented Nov 15, 2020

@iamgit66 软件使用过程中有没有什么 BUG?或者功能上的建议、需求?

@iamgit66
Copy link

相当完美了,完全满足我的需求。
ip.txt我只保留104网段,看显示ping了2万多个IP,再改进的话,是否能减少测试延迟的ip数?
有没有必要增加一个自定义测速下载点的功能呢?其实得到IP后,用curl也足够。

@XIU2
Copy link
Owner

XIU2 commented Nov 16, 2020

@iamgit66

你看到的 IP 延迟测速数量是 × 4 的,因为每个 IP 要测试 4 次延迟。

你如果想要更快一点,

  1. 可以降低这个延迟测试次数,比如只测试 2 次: -t 2
  2. 或者增加延迟测速线程(默认同时测速 500 个):-n 800

延迟测试次数太少会降低延迟准确度,延迟测速线程不要超过 1000,否则会失准

自定义测速下载点?这不就是自定义测速地址吗?早就有了 -url https://xxx.xx/xx

@iamgit66
Copy link

所以说相当完美了!

@XIU2
Copy link
Owner

XIU2 commented Nov 16, 2020

@iamgit66

既然该项目这么好用了,为啥你不点个 ⭐ 再走呢... 😥

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
功能建议 功能与建议
Projects
None yet
Development

No branches or pull requests

4 participants