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

IPRange 没必要排除第一个和最后一个 #20

Closed
CrazyBoyFeng opened this issue Dec 10, 2020 · 13 comments
Closed

IPRange 没必要排除第一个和最后一个 #20

CrazyBoyFeng opened this issue Dec 10, 2020 · 13 comments
Labels
功能建议 功能与建议

Comments

@CrazyBoyFeng
Copy link
Contributor

CrazyBoyFeng commented Dec 10, 2020

我想测试某些单独的 ip,结果发现不支持裸 IP 这个格式,必须带子网。然后我发现掩码 /31/32 也不识别。
根据 RFC3021,子网 255.255.255.254 表示两个主机,255.255.255.255 表示一个主机。没有号段标识地址和广播地址。
其实网络号和广播地址在广域网里是没有意义的。所以都可以当作正常的主机地址使用,1.0.0.0104.16.2.255 都是合法主机地址,都可以 ping 通,所以 IPRange 没必要排除第一个和最后一个。网络号和广播地址现如今只在局域网才有用。

此外,我写入 104.16.2.148/30 但程序返回的测试结果是 104.16.2.1104.16.2.2,也就是 104.16.2.0/30 的测试结果,这应该是个 bug?

@CrazyBoyFeng CrazyBoyFeng changed the title 希望能增加单ip识别或对子网31和32特殊处理 IPRange 没必要排除第一个和最后一个 Dec 10, 2020
@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

测速的 IP 必须要带上子网掩码,程序就是这样设计的。

你用的是 v1.4.2 版本吗?
根据 v1.4.1 版本的更新内容。当 IP 最后一段不是 0 时,将不会随机而是使用指定值。

因此 ip.txt 文件内是 104.16.2.148/30 时测速,得到的结果显示的是 104.16.2.148 (刚刚测速的结果)。

文件 ip.txt 内容:

104.16.1.0/24
104.16.2.148/24
104.16.3.148/30

测速结果:

# XIU2/CloudflareSpeedTest v1.4.2

开始延迟测速(模式:TCP IPv4,端口:443):
12 / 12 [----------------------------------------------------------------------------------------------] 100.00%
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度 (MB/s)
104.16.1.85       4       4       0.00    199.26    0.00
104.16.2.148      4       4       0.00    199.38    0.00
104.16.3.148      4       4       0.00    201.34    0.00

按下 回车键 或 Ctrl+C 退出。

@CrazyBoyFeng
Copy link
Contributor Author

1.4.2

我明白了,因为我用的是 -allip,不用 -allip 则返回了指定的 ip。
-allip 模式把 104.16.3.148/30 识别成了 104.16.3.0/30

这样实现有点粗糙,我觉得改成最后一段也按子网进行匹配比较好,然后也不用掐头去尾,把 0 和 255 也算入。

@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

因为刚开始写的时候根本没想那么多,当时只是单纯的批量测速 Cloudflare IP 段,根本不需要写的那么仔细。

@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

最主要的是,这软件用的人太少,没什么人讨论,我都不知道软件的一些功能到底该如何设计。

@CrazyBoyFeng
Copy link
Contributor Author

-allip 功能一般用于扫段,与其实现 -allip 不如实现按子网随机。
我看了原项目对这部分的处理是很简单的,只是可惜它没有 v6。

我对 go 不熟,否则也可以帮忙写一写。

@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

不加 -allip 就是子网随机呀。
我对 Go 也不熟,完全是临时学的。

@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

v1.4.3 更新内容

  1. 优化 IP 段子网掩码解析。IPRange 没必要排除第一个和最后一个 #20
    新增支持 IP 段解析最后一段 x.x.x.0 x.x.x.255。
    解析 IP 段时,如果最后一段不是 0,则无论是否使用 -allip 参数都会无视子网掩码保留原 IP(用于单个 IP 测速)。

@XIU2 XIU2 added the 功能建议 功能与建议 label Dec 10, 2020
@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

你试试新版本看是否满足你的要求。
说实话,自从这软件写出来后,我自己也没用过几次,基本都是在根据大家的需求更新...

如果没什么问题的话,就关闭该 Issues 吧。
当然,走之前点个 ⭐ 鼓励一下更好~

@XIU2
Copy link
Owner

XIU2 commented Dec 10, 2020

我发现我好像理解错误了。
你说的是 104.16.2.148/30,指的是 .148-.151 。但我把软件改成解析为 .148 了...

在折腾这个项目之前,我对 IP 的理解比普通网民好不了多少,结果现在知识基础不够了,各种转换给我搞晕了。

感觉越写越复杂,越写越跑偏了。

@CrazyBoyFeng
Copy link
Contributor Author

抱歉,今天太晚了。我本来想整理一下思路明天在讨论怎么设计的。
不过似乎这个问题已经变成我的个性化需求了。这样不好,我不应该对别人提出要求。等我有时间了,我会来帮忙设计和改进。

@CrazyBoyFeng
Copy link
Contributor Author

这个软件的作用是随机地从各个段里找ping低且丢包少的ip,择取较优部分测试下载速度。

而我的使用方式是,每次测试后,从ip.txt中删除测试结果较差的段。从余下的段中精挑细选。这样几次下来,就会细化到一个小段里,也就有了104.16.2.148/30这种使用方式。

关于allip我之前想简单了,我以为随机选取的算法是分组随机,以为这样在-n参数大于段内ip总数时所有的ip都会被选上。实际上不是这样。那么allip参数仍然是需要的。
但iprangeloader的逻辑可以简化一些。不用判断ip末位是不是0。max不应是254而是255。对于最后一位的子网也像前面那几段一样处理。如此一来也兼容了子网/31和/32,/32就是单ip。我注意到你已经进行了一些改进。

@XIU2
Copy link
Owner

XIU2 commented Dec 11, 2020

目前软件对于 /24 以上的子网掩码,只支持 x.x.x.0/30 这样的,并不支持 x.x.x.111/30 这样的。
我还需要研究下怎么去实现支持后者。

@XIU2
Copy link
Owner

XIU2 commented Dec 11, 2020

v1.4.4 更新内容

  1. 优化 IP 段子网掩码解析。IPRange 没必要排除第一个和最后一个 #20
    现在完全支持 /24 以上的子网掩码 IP 段解析了。
    现在如果要测速单个 IP,请在 IP 后面加上 /32 子网掩码。

现在对于 /24~/32 的子网掩码都可以正确解析了(无论最后一段是 .0 还是 .X)。

比如 104.16.2.148/30,如果有 -allip 则会解析为

104.16.2.148
104.16.2.149
104.16.2.150
104.16.2.151

如果没有 -allip 也会在这个范围内随机(最后一段)。

以前是会把 104.16.2.148/30 解析为 104.16.2.0/30

@XIU2 XIU2 mentioned this issue Oct 7, 2022
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

2 participants