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地址。

posted on 2022-03-19 22:57  寂寞梧桐#  阅读(96)  评论(0编辑  收藏  举报

导航