前言
CDN(内容分发网络)原理:就是将内容缓存在终端用户附近。
具体来说,CDN就是采用更多的缓存服务器(CDN边缘节点),布放在用户访问相对集中的地区或网络中。当用户访问网站时,利用全局负载技术,将用户的访问指向距离最近的缓存服务器上,由缓存服务器响应用户请求。
一、利用nslookup判断是否存在cdn
def isCDN(domain): # 判断目标是否存在CDN
parm = 'nslookup ' + domain
result = os.popen(parm).read()
if result.count(".") > 8: # nslookup [ip]的返回结果中,多于8个.代表返回多于1一个ip,即存在cdn
print(domain + " 存在CDN")
else:
print(domain + " 不存在CDN")
if __name__ == '__main__':
isCDN("jd.com")
返回结果:
原理:通过nslookup方法查询DNS的记录,若存在多条不同IP,则使用了CDN加速。
二、使用socket.getaddrinfo(host,port)获取网站的IP
def get_CDNlist(domain): # 获取域名解析出的IP列表
ip_list = []
number = 0
try:
addrs = socket.getaddrinfo(domain, 'http')
for item in addrs:
# print(item)
if item[4][0] not in ip_list:
ip_list.append(item[4][0])
number += 1
except Exception as e:
print(str(e))
if number > 1: # getaddrinfo的返回结果中,多于一个ip,即存在cdn
print('存在cdn')
return ip_list
if __name__ == '__main__':
print(get_CDNlist("jd.com"))
返回结果:
原理:使用socket.getaddrinfo(host,port)这种方式去获取网站的IP,如果目标站点使用了CDN的话,那么getaddrinfo就会返回多个IP。利用返回的IP数量来进行判断。
三、其他方法
站长之家多地ping : 若异地ping出相同IP,则未使用CDN;否则使用。
同时本地ping出不同IP: