排除CDN的技巧1

猫屋博客

基本思路

ping子域名,处理ping后返回的数据,返回的域名不变,则暂定为未使用CDN,返回的域名变了,则往往使用CDN或云WAF,由于每个ping比较慢,最慢也得1秒,所以需要采用队列+多线程

排除CDN的技巧1

核心代码

cdn-exclude.py# 基于ping判断是否为cdn节点或云waf节点

def work(q, cdn_list, non_cdn_list, non_parse_list, non_cdn_ip_list):

while True:

if q.empty():

return

else:

domain = q.get()

# print(domain)

p = subprocess.Popen(["ping.exe", "-n", "1", "-w", "1000", domain], shell=True, stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

ping_str = p.stdout.read()

# print(ping_str)

ping_list = ping_str.decode("GBK").split("\r\n")

# print(ping_list)

# 奇怪的是,在pycharm下返回中文,在ConEmu下返回英文,故需要兼容

if ping_list[0].startswith("Ping request could not find host") or ping_list[0].startswith("Ping 请求找不到主机"):

# print("Ping 请求找不到主机 " + domain)

non_parse_list.append(domain + "__" + "Ping 请求找不到主机")

continue

else:

ping_return_domain = ping_list[1].split(" ")[1]

ping_return_ip = ping_list[1].split(" ")[2].strip("[").strip("]")

# print(ping_return_domain)

if ping_return_domain == domain:

non_cdn_list.append(domain + "__" + ping_return_ip)

non_cdn_ip_list.append(ping_return_ip)

else:

cdn_list.append(domain + "__" + ping_return_domain)


def main():

# 创建队列并填充消息

domain_list = []

with open("domain.txt", "r", encoding="UTF-8") as fr:

for line in fr.readlines():

domain_list.append(line.strip("\n"))

q = queue.Queue()

for domain in domain_list:

q.put(domain)




main()


文章版权声明:除非注明,否则均为猫屋博客MAOWUO.CN原创文章,转载或复制请以超链接形式并注明出处。

发表评论取消回复

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,484人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码