批量域名筛查CDN

admin 2024年4月23日07:00:58评论58 views字数 2098阅读6分59秒阅读模式

判断CDN的方法有很多,有根据socket探测返回ip数量进行判断、nslooup进行判断。

但是我比较喜欢用多地ping来判断。用国内、海外的服务器去ping域名,看返回的ip是否相同,如果不相同那么就是存在CDN了。

思路导图

例如:

www.kingsoft.com  有cdn

ffbebbs.kingsoft.com 无cdn

批量域名筛查CDN

https://www.wepcc.com/ 这个网站速度应该会快很多,该网站的规律是如下图所示,先获取所有节点的hash

批量域名筛查CDN

然后通过hash去对应服务器进行域名的ping获得ip值

批量域名筛查CDN

代码实现

获取节点的所有hash

func get_hash(i string, wg *sync.WaitGroup) { //获取服务器的hash  defer wg.Done()  //i := "ffbebbs.kingsoft.com"  resp, err := http.PostForm("https://www.wepcc.com/", url.Values{"host": {i}, "node": {"2,3,6"}})  if err != nil {    fmt.Printf("get failed, err:%vn", err)    return  }  defer resp.Body.Close()  body, err := ioutil.ReadAll(resp.Body)  if err != nil {    fmt.Printf("read from resp.Body failed, err:%vn", err)    return  }  //fmt.Print(string(body))  reg := regexp.MustCompile(`<tr class="item" >`)  if reg == nil {    fmt.Println("MustCompile err")    return  }  //提取关键信息  result := reg.FindAllStringSubmatch(string(body), -1)  //fmt.Println(result)  //过滤<></>  var a []string  for _, text := range result {    a = append(a, text[1])    //fmt.Println(text[1])  }  //fmt.Println(a)  check_ping(i, a)}

利用上一步中的hash进行cdn的探测,有时候服务器不一定能ping出来ip,还会无响应等状态,所以比较的时候要判断好

func check_ping(i string, a []string) { //利用各地的服务器ip节点去进行ping,进行比较  var ip []string  for _, b := range a {    resp, err := http.PostForm("https://www.wepcc.com/check-ping.html", url.Values{"host": {i}, "node": {b}})    if err != nil {      fmt.Printf("get failed, err:%vn", err)      return    }    defer resp.Body.Close()    body, err := ioutil.ReadAll(resp.Body)    if err != nil {      fmt.Printf("read from resp.Body failed, err:%vn", err)      return    }    //var data[] string    //fmt.Println(string(body))    //c, err := regexp.MatchString("((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}", string(body))    if strings.Index(string(body), "ipAddress") > 0 { //如果服务器报错,就不会存在ipAddress的字段      c := regexp.MustCompile("((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}").FindAllStringSubmatch(string(body), -1)      ip = append(ip, c[0][0])    }  }  b := 1  if len(ip) > 0 { //ip长度大于0再进行比较    //fmt.Print(len(ip), "   ", i)    for a := 1; a < len(ip); a++ {      if ip[0] != ip[a] {        b = 0        break      }    }  }  if b == 1 {    fmt.Printf("[+]no cdn: %-30s %10sn", i, ip[0])  }  // } else {  //   fmt.Printf("[-]have cdn: %-20sn", i)  // }}

效果

准确率是百分百的,就是速度慢了一点,但是其实也还行。

批量域名筛查CDN

参考链接

https://github.com/AuFeng111/go_cdn
https://www.yuque.com/aufeng/aufeng_good/gq2dd5

批量域名筛查CDN

 

原文始发于微信公众号(巢安实验室):批量域名筛查CDN

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月23日07:00:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   批量域名筛查CDNhttps://cn-sec.com/archives/2085760.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息