当前位置:网站首页>批量检测url是否存在cdn—高准确率
批量检测url是否存在cdn—高准确率
2022-07-02 02:28:00 【山山而川'】
看了网上对url批量检测cdn的脚本没有多少也不准确,这里写一下
一般判断cdn的方法如下
全球ping
显示的ip地址超过一个则使用了cdn,这是最靠谱的方法
nslookup
1. nslookup默认解析
使用 "nslookup 域名",如果目标有CDN服务的话,那么“非权威应答”中的“addresses”中的IP数 >=2个,但是也会有误报

2. 不同DNS域名解析
不同DNS域名解析情况对比,判断其是否使用了CDN。不同DNS解析结果若不一样,很有可能存在CDN服务
所以我们可以根据这两点来判断是否使用了cdn
批量检测脚本
如果引用全球ping的api接口进行检测,那检测效率会受限于服务器网速以及可能遇到被封ip的风险。这里使用nslookup进行多次检测,以确认是否使用cdn,准确率99%

cdn.py
from subprocess import PIPE, Popen
import re
import os
from colorama import init,Fore
init(autoreset=True)
import argparse
def args():
parser = argparse.ArgumentParser(description='cdn批量检测脚本')
parser.add_argument('-f',type=str,help='批量检测,请将url放在txt文档中,一个一行')
args = parser.parse_args()
ssrc = """
______ _____________ ____
/ ___/ / ___/\_ __ \_/ ___\
\___ \ \___ \ | | \/\ \___
/____ >/____ > |__| \___ >
\/ \/ \/
Author: 山山而川
"""
print(ssrc)
if args.f:
filename = args.f
if os.path.exists(filename):
check_cdn(filename)
else:
print("输入的文件名不存在!")
def check_cdn(filename):
result_list = []
for url in open(filename,'r'):
url = url.replace("\n","")
ip = url.replace("http://","").replace("https://","").replace("/","").replace("\n","")
proc = Popen('nslookup %s' %(ip),stdin=None,stdout=PIPE,stderr=PIPE,shell=True)
outinfo, errinfo = proc.communicate()
info = outinfo.decode('gbk')
ip_list = re.findall(r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}",info,re.S)
if len(ip_list) >= 3:
print(Fore.RED+"[-]",url," 存在cdn")
continue
if len(ip_list) == 1:
print(Fore.BLUE+"[-]",url," 请求超时")
continue
if len(ip_list) == 2:
#二次判断,提高准确率
proc = Popen('nslookup %s 223.5.5.5' %(ip),stdin=None,stdout=PIPE,stderr=PIPE,shell=True)
outinfo, errinfo = proc.communicate()
info1 = outinfo.decode('gbk')
ip_list1 = re.findall(r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}",info1,re.S)
if len(ip_list1) >= 3:
print(Fore.RED+"[-]",url," 存在cdn")
continue
if len(ip_list1) ==2:
name1 = re.findall(r'名称:.*Address:.*?(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})',info,re.S)[0]
name2 = re.findall(r'名称:.*Address:.*?(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})',info1,re.S)[0]
if name1 != name2:
print(Fore.RED+"[-]",url," 存在cdn")
continue
if name1 == name2:
print(Fore.GREEN+"[+] %s 不存在cdn \t真实ip: %s" %(url,name2))
result_list.append(name2)
lis = list(set(result_list))
if len(lis):
for r in lis:
with open("result.txt",'a') as f:
f.write(r+"\n")
print("检测完毕,不存在cdn的url ip保存在当前路径'result.txt'")
if not len(lis):
print("检测完毕!")
if __name__ == '__main__':
args()边栏推荐
- 【带你学c带你飞】4day第2章 用C语言编写程序(练习 2.5 生成乘方表与阶乘表
- Golang lock
- Sword finger offer 29 Print matrix clockwise
- JPM 2021 most popular paper released (with download)
- How to use redis ordered collection
- Pytest testing framework
- 大厂裁员潮不断,双非本科出身的我却逆风翻盘挺进阿里
- flutter 中间一个元素,最右边一个元素
- The basic steps of using information theory to deal with scientific problems are
- Quality means doing it right when no one is looking
猜你喜欢

leetcode2311. Longest binary subsequence less than or equal to K (medium, weekly)

OpenCASCADE7.6编译

leetcode2311. 小于等于 K 的最长二进制子序列(中等,周赛)

Leetcode question brushing (10) - sequential question brushing 46 to 50

Spend a week painstakingly sorting out the interview questions and answers of high-frequency software testing / automated testing
![[question] - why is optical flow not good for static scenes](/img/8d/2cf6f582bc58cc2985f50e3f85f334.jpg)
[question] - why is optical flow not good for static scenes

Pat a-1165 block reversing (25 points)

剑指 Offer 62. 圆圈中最后剩下的数字

Feature query of hypergraph iserver rest Service

The basic steps of using information theory to deal with scientific problems are
随机推荐
Iterative unified writing method of binary tree
How to turn off debug information in rtl8189fs
剑指 Offer 29. 顺时针打印矩阵
AR增强现实可应用的场景
es面試題
[technology development -21]: rapid overview of the application and development of network and communication technology -1- Internet Network Technology
花一个星期时间呕心沥血整理出高频软件测试/自动化测试面试题和答案
MySQL主从延迟问题怎么解决
Additional: information desensitization;
Mathematics in Sinorgchem: computational geometry
trading
【带你学c带你飞】2day 第8章 指针(练习8.1 密码开锁)
Realize the code scanning function of a custom layout
2022低压电工考试题模拟考试题库模拟考试平台操作
【毕业季】研究生学长分享怎样让本科更有意义
How to solve MySQL master-slave delay problem
How to run oddish successfully from 0?
query词权重, 搜索词权重计算
Flutter un élément au milieu, l'élément le plus à droite
剑指 Offer 42. 连续子数组的最大和