当前位置: 首页 > 后端技术 > Python

pythondns模块实现dns压测

时间:2023-03-26 16:47:41 Python

#coding=utf-8"""执行DNS压力测试"""importtimeimportdns.resolverfromconcurrent.futuresimportThreadPoolExecutorimportpandasaspd#指定dns服务器myResolver=dns.resolver.Resolver()myResolver.nameservers=['8.8.8.8']#常数初始化base_threads=10increment_threads=10threads_limit=10query_domain='www.baidu.com'expected_result='www.wshifen.com.'pressure_duration_per_round=0.01#结果集初始化concurrency=[]dig_response=[]_response=[]_response=[]defdig(threads_num):start=time.time()result=Nonetry:result=myResolver.resolve(query_domain,'A')除了dns.exception.DNSExceptionase:print(e)end=time.time()如果结果为无:dig_result.append(False)print("digfail\n")elifexpected_resultinstr(result.rrset):dig_result.append(True)print("digsuccess\n")else:dig_result.append(False)print("挖掘失败\n")response_time.append(end-start)concurrency.append(threads_num)whileTrue:如果base_threads>threads_limit:breakwithThreadPoolExecutor(max_workers=base_threads)asthread_pool:start_time=time.time()whileTrue:cur_time=time.time()如果cur_time-start_time>pressure_duration_per_round:breakthread_pool.submit(dig,base_threads)thread_pool.shutdown(wait=True)print("Threads:%d"%base_threads)base_threads+=increment_threadsdf=pd.DataFrame({"concurrency":concurrency,"dig_result":dig_result,"response_time":response_time,})df.to_csv('/Users/wuhan/Desktop/python/threads/dns_overload/out/test_result.csv',index=False)print('脚本完成')