关于拓扑测试
本章讲述拓扑测试原理, /topo 指令来源于topology一词
Last updated
本章讲述拓扑测试原理, /topo 指令来源于topology一词
Last updated
概述
koipy的拓扑测试可以用来查看节点入口 与出口 之间的对应关系,可以用来大致估计数据的路由去向。
关于网络拓扑(Network topology)的解释可以查看 此地址
在了解拓扑测试之前,我们需要了解一下传统的典型网络拓扑图:
在这里,我们引出两个名词(入口和出口)
入口 —— 节点的配置文件中的地址
出口 —— 通过代理服务器后,网站获取的最终访问IP
相信各位已经发现问题:我们无法控制经过入口后的流量,也就无法获得经过入口后的网络拓扑
因此,需在这里事先说明,koipy的拓扑测试仅能获取入口/出口相关的IP/域名信息,暂时无法通过技术手段解决(如果你能,那在下顶礼膜拜)
获取节点配置文件上的地址,如果是IP地址,则直接通过geoip API获取IP地理位置等信息。
如果是域名,那么就稍微有点复杂了,它需要在后端那里使用DNS服务将域名解析为ip地址,然后同上IP处理方式。因为涉及到DNS解析,所以这里的门道会有一点多,这里会分情况讨论。
如果一个域名能够被DNS服务器解析出多个IP结果,那么会在拓扑结果图中显示的簇为 IP的数量
如果一个域名能够被DNS服务器解析出IPV4和IPV6地址,那么会在拓扑结果图中栈显示为数字4和6
一份配置文件中,往往有多个入口地址,koipy会将相同的入口地址的节点进行统计,统计得到的节点数量即为出口数量,入口会进行编号,每个编号的入口对应出口分析中的入口编号,下图展现的是,编号1的入口和其对应的出口节点
对于地区编号为CN的入口,koipy会尝试通过GEOIP脚本获取更为精确的地区数据,但不保证每个入口IP都能查询到详细地区
有一些技术会导致后端解析的IP出现不一致,从而导致IP的地区信息不一致:
DNS智能解析
一些代理提供商针对不同地区有不同网络优化,DNS会根据地区的不同返回给后端不同的IP
通过代理环境经过HTTP协议请求一个网址,该网址记录访问者的IP,那么我们可以近似认为这是代理服务器的出口IP
比如你可以连接上代理,然后访问这个网址: https://ip.sb/
就可以获取你当前的代理服务器IP,miaospeed后端也是同理,只不过多了批量获取出口IP的功能。
与入口测试不同,确定出口的IP的双栈测试是通过额外访问仅支持IPV6的网址而来的。通过访问一个仅有IPV6解析的地址,确定不出错地返回HTTP响应,那么我们就认为它是支持IPV6访问的。这可以给代理节点的使用者更好地体验。不会都2025年了,还有代理节点不支持IPV6网络吧😅
koipy会对出口IP进行统计分析,对相同的出口IP进行累加,形成节点簇,在大部分情况下,如果这些节点簇大于1,那么我们可以近似认为(下面会讲到特殊情况)这些节点是复用的
复用原因:
多个不同入口对应同一个出口,涉及网络质量优化,比如电信用户用电信入口,移动用户用移动入口
同一个入口,同一个出口,但是分成多个节点,这种一般是为了省钱,营造运营噱头
特殊情况:
多个节点不可用
坏掉了自然就无法获取到出口IP,这个时候koipy会把它们合并,簇会大于1,无法确定复用情况
代理服务器的负载均衡
前面说过,我们无法获取中间的链路过程,所以存在一种可能,多个节点(往往是同个地区的)之间可能有负载均衡策略,这是受代理提供商调控的,它可能会自动把多个节点的流量都分配到同一台代理服务器上,这样表现出来的效果就是后端GEOIP脚本获取的出口IP均相同,出现这个情况建议咨询提供商进一步了解。
为了保持美观,在拓扑图表格的同一列,koipy会对相邻行中的相同文本进行合并,仅显示一次,如下图所示:
蓝色方框表示1~7号节点均为1号入口
红色方框表示1~5号节点组织均相同
绿色方框表示8~17号节点AS编号均相同
拿到入口以及出口所有IP后,后端就会通过GEOIP脚本,逐个查询IP的地理位置、所属ASN等信息,然后返回给主端(bot)
主端拿到测试结果,开始进行拓扑结果图片的绘制(简称拓扑图),最后发送到Telegram前端,整个拓扑测试结束
GeoIP(Geolocation IP)是一种通过IP地址确定设备地理位置的技术,其核心是基于IP地址与地理信息的映射数据库。
GeoIP数据库将IP地址映射到地理位置信息,包括国家、省/州、城市、经纬度等,这种映射可精确到不同层级,取决于提供这项服务的提供商
有一些网络公开的服务商提供免费的基于HTTP API的查询服务,通过编写miaospeed的测试脚本,就可以方便地从互联网查询IP信息了,在此过程中,koipy将其命名为GEOIP脚本
GEOIP脚本内置在koipy主端中,每次测试都会发送给后端使用
IP信息在一天内不会变动得很频繁,出于资源的可利用性考虑,后端会缓存之前的查询结果,不会每次都会运行GEOIP脚本。IP查询结果的缓存时间为6小时,无法主动刷新缓存,可以重新启动后端清空缓存。
关于拓扑测试,目前来说局限性还是太大了。
关于出口拓扑
出口拓扑实际上是可以作假的,这方面的操作性很高,所以不要将测试结果奉为标准 ,仅供参考。
遥想当年
早期代理界哪有什么拓扑测试,日益增长的需求,让大家对节点的要求也越来越高。出现拓扑的原因一方面是节点复用的兴起,另一方面是跨境电商、海外流媒体等增值服务对IP纯净度的要求日益增高。人们需要一个方便的工具来测试它们,koipy不是第一个先行者,是有需求而顺应天意出现,未来也会有更好的工具。