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
測試結果: