cdn扫描器
cdn扫描器
用于简单的判断网站是否存在cdn,同时可以实现cdn的批量化的扫描。cdn可以加快浏览者访问网站的速度,但是对于网络安全爱好者来说cdn则是非常影响对网站的探测,简单的说cdn就是网站的一种缓存技术。
优点
简单易懂,可以拓展性高,可以实行批量化的操作。
代码
import socket
from threading import Thread, Semaphore
s_m = Semaphore(20)
timeout = 5.0
# 超时判断
socket.setdefaulttimeout(timeout)
class ThreadWithReturnValue(Thread):
def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):
Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon)
self._return = None
def run(self):
if self._target is not None:
self._return = self._target(*self._args, **self._kwargs)
def join(self):
Thread.join(self)
return self._return
def get_ip_list(url): # 获取域名解析出的IP列表
dict = {}
with s_m:
try:
addrs = socket.getaddrinfo(url, None)
for item in addrs:
if item[4][0] in dict:
dict.get(url).append(str(item[4][0]))
else:
dict.setdefault(url, []).append(str(item[4][0]))
# print('[*] Url: {} IP: {}'.format(domain, dict[domain][0]))
except Exception as e:
print('错误: {} 信息: {}'.format(url, e))
pass
except socket.timeout as e:
print('{} 超时'.format(url))
pass
return dict
def open_url_txt(filename):
url_list = []
with open(filename, 'r') as f:
for l in f:
url_list.append(l.strip())
return url_list
def save_info(url, ip, key):
if key == 1:
with open('url_ip.csv', 'a+') as f:
url_info = url + ',' + ip + '\n'
f.write(url_info)
else:
with open('error_info.txt', 'a+') as f:
f.write(url + ' ' + ','.join(ip) + '\n')
if __name__ == '__main__':
url_list = open_url_txt('url_list.txt')
thread_list = []
for url in url_list:
t = ThreadWithReturnValue(target=get_ip_list, args=(url,))
thread_list.append(t)
t.start()
for t in thread_list:
ip = t.join()
if ip:
for key in ip:
if len(ip[key]) > 1:
print('Url: {} 可能存在CDN'.format(key))
save_info(key, ip[key], 0)
else:
print('Url:{} 可能的真实IP:{}'.format(key, ip[key][0]))
save_info(key, ip[key][0], 1)
print('完成!')
使用
把ip或者是网站列表写入ip_list
运行结果
ip_list
www.baidu.com
www.cnblogs.com
url_list
www.cnblogs.com,118.31.180.41
结果 输出域名和其真实的ip地址。
浙公网安备 33010602011771号