【HR】排除CDN的技巧1

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-9-13

基本思路
ping子域名,处理ping后返回的数据,返回的域名不变,则暂定为未使用CDN,返回的域名变了,则往往使用CDN或云WAF,由于每个ping比较慢,最慢也得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()

沙发
昵称814858 2022-9-13
顶顶顶[哈哈]
板凳
昵称814858 2022-9-13
坐等更新[呵呵]
地板
昵称22283 2022-9-16
大佬,可以帮我写一个程序吗,有偿[哈哈]
4楼
玖月๑ 2022-9-23
奖励结算,当前结算等级:1;少侠辛苦了。

评论

登录后才可发表内容
  • 主题

    70

  • 帖子

    429

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0913s Mem:2090Kb