01前言
现在很多大网站基本上都使用了CDN进行加速访问,方便快速响应用户的请求,提高用户访问体验。这种做法对于我们日常的渗透测试来说,CDN的虚假IP确实很干扰我们的测试。所以判断出是否使用CDN对我们来说至关重要。
02基本原理
根据 CDN 的工作原理,如果网站使用了 CDN,那么从全国各地访问网站的 IP 地址是各个 CDN 节点的 IP 地址。在互联网上有许多网站提供 PING 命令的服 务,即从该网站全国各地的节点向目标网站发送 PING 命令,返回目标网站接收 数据包的 IP 地址、IP 归属地和响应时间等信息。以https://www.wepcc.com/为例,如图所 示,对 https://www.baidu.com 进行 PING 命令测试,根据 IP 地址和归属地不同, 可以判断 https://www.baidu.com 使用了 CDN。为了防止信息泄露,将部分 IP 和 归属地信息隐去:
03脚本程序设计
根据基本原理对脚本程序的设计流程图如下:
04脚本程序实现
根据程序流程图,实现其程序。如下:
def iscdn(url):
"""
判断目标url是否存在CDN
:param url: 目标url
:return: True or False
"""
result = []
headers = get_ua()
# wepcc.com用于ping测试的服务器id编号
for i in (34,15,27,1,32,8,21,14,28,7,17,19,4,31,25):
data = {'node':i,'host':url}
r = requests.post('https://www.wepcc.com/check-ping.html',headers = headers,data=data)
l = re.findall(r'\d+.\d+.\d+.\d+', r.text)
result.append(l[0])
if len(set(result)) > 1:
return True
else:
return False
其中get_ua()实现请求头的随机配置,实现如下:
from fake_useragent import UserAgent
HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'User-Agent': "",
'Referer': "",
'X-Forwarded-For': "",
'X-Real-IP': "",
'Connection': 'keep-alive',
}
#产生随机的hearder的部分随机参数值
def get_ua():
ua = UserAgent()
key = random.random() * 20
#产生随机0—好么20位子字符串
referer = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(int(key))])
referer = 'www.' + referer.lower() + '.com'
ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
HEADERS["User-Agent"] = ua.random
HEADERS["Referer"] = referer
HEADERS["X-Forwarded-For"] = HEADERS["X-Real-IP"] = ip
return HEADERS
05脚本结果演示
测试站点:
①百度:www.baidu.com 使用了CDN
②我的博客:www.saodi.best 未使用CDN
测试结果: