原理:
已知請求 url,獲取域名,使用命令 :nslookup 域名
然後從得到的結果中去找是否有 Addresses 字段,有且該字段下 ip 地址要大於等於 2 個,即說明使用了 CDN
import re
from urllib.parse import urlparse
import subprocess
url = "http://www.hahah.com.cn/?file=54565f4s5f4d456d4g5df4gdf4"
res = urlparse(self.url)
demain = res.netloc
fw = open('D:\\..\\..\\demon.txt', 'w+')
pi = subprocess.Popen('nslookup {}'.format(netloc), shell=True, stdout=subprocess.PIPE)
out = pi.stdout.read().decode('gb18030') # 編碼根據實際結果調整
# 判斷返回值中是否有 Addresses 字段,且該字段下 ip 地址要大於等於 2 個,即說明使用了 CDN
strs = re.findall(r'Addresses:(\s*(((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\s*)*)', out, re.S)
# print(strs)
if strs == []:
pass
else:
l = strs[0][0].split('\r\n\t')
# print(l)
addersses = []
for address in l:
addersses.append(address.strip())
# print(addersses)
if len(addersses) > 1:
fw.write(self.url + '\n')
fw.close()