当前位置:网站首页>批量检测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()边栏推荐
- [pit] how to understand "parameter fishing"
- Flutter un élément au milieu, l'élément le plus à droite
- [question 008: what is UV in unity?]
- MySQL constraints and multi table query example analysis
- [learn C and fly] day 5 chapter 2 program in C language (Exercise 2)
- 剑指 Offer 47. 礼物的最大价值
- JS slow animation
- Architecture evolution from MVC to DDD
- Set status bar color
- leetcode2312. 卖木头块(困难,周赛)
猜你喜欢

【带你学c带你飞】2day 第8章 指针(练习8.1 密码开锁)

JVM interview
![[graduation season] graduate seniors share how to make undergraduate more meaningful](/img/03/9adc44476e87b2499aa0ebb11cb247.png)
[graduation season] graduate seniors share how to make undergraduate more meaningful
![[reading notes] programmer training manual - practical learning is the most effective (project driven)](/img/13/28116a74512895ad725dffed02f8bd.png)
[reading notes] programmer training manual - practical learning is the most effective (project driven)

An analysis of circuit for quick understanding

What style of Bluetooth headset is easy to use? High quality Bluetooth headset ranking

Comparative analysis of MVC, MVP and MVVM, source code analysis

What are the necessary things for students to start school? Ranking list of Bluetooth headsets with good sound quality

What kind of good and cost-effective Bluetooth sports headset to buy
![[learn C and fly] 2day Chapter 8 pointer (practice 8.1 password unlocking)](/img/2e/8fe55393ccca6663d98c0b3dd9a146.png)
[learn C and fly] 2day Chapter 8 pointer (practice 8.1 password unlocking)
随机推荐
【深度学习】infomap 人脸聚类 facecluster
leetcode2312. 卖木头块(困难,周赛)
JS slow animation
Which is a good Bluetooth headset of about 300? 2022 high cost performance Bluetooth headset inventory
MySQL constraints and multi table query example analysis
2022 low voltage electrician test question simulation test question bank simulation test platform operation
Provincial election + noi Part IV graph theory
【liuyubobobo-玩转Leetcode算法面试】【00】课程概述
MySQL主从延迟问题怎么解决
【OpenCV】-5种图像滤波的综合示例
How to batch add background and transition effects to videos?
leetcode2312. Selling wood blocks (difficult, weekly race)
A quick understanding of digital electricity
设置状态栏颜色
实现一个自定义布局的扫码功能
The basic steps of using information theory to deal with scientific problems are
Spend a week painstakingly sorting out the interview questions and answers of high-frequency software testing / automated testing
trading
JPM 2021 most popular paper released (with download)
MySQL operates the database through the CMD command line, and the image cannot be found during the real machine debugging of fluent