dnsperf是我最近寫的一個開源的DNS壓力測試工具,用戶可以用它來對DNS服務器或者Local DNS做壓力測試。dnsperf目前的實現是單進程模式,通過epoll非阻塞地處理網絡事件。
dnsperf的地址:https://github.com/cobblau/dnsperf
參數詳解
Dnsperf 支持下面的這些命令行參數:
-s 用來指定DNS服務器的IP地址,默認值是127.0.0.1
-p 用來指定DNS服務器的端口,默認值是53
-d 用來指定DNS消息的內容文件,該文件中包含要探測的域名和資源記錄類型,見下文
-t 用來指定每個請求的超時時間,默認值是3000ms
-Q 用來指定本次壓測的最大請求數,默認值是1000
-c 用來指定並發探測數,默認值是100. dnsperf會從-d指定的文件中隨機選取100個座位探測域名來發送DNS請求.
-l 用來指定本次壓測的時間,默認值是無窮大。
-e 本選項通過EDNS0,在OPT資源記錄中運用edns-client-subnet來指定真實的client ip.
-i 用來指定前后探測的時間間隔,因為dnsperf是一個壓測工具,所以本選項目前還不支持。
-P 指定用哪個傳輸層協議發送DNS請求,udp或者tcp。默認值是udp
-f 指定用什么地址類型發送DNS請求,inet或者inet6。默認值是inet
-v 除了標准的輸出外,還輸出每個相應碼的個數。
-h 打印幫助
數據文件示例:
上文中提到,-d選項指定數據文件名,數據文件示例如下:
# This is a comment and is ommited # The columns after column 2 will be ommited if one line contains more than 3 colums. www.app1.com A
數據文件中以“#”開頭的行被認為是注釋行,會被dnsperf忽略。
其中有效數據由兩列組成,第一列是查詢域名,第二列是查詢的資源類型,dnsperf支持的資源類型如下:
A
,NS
,MD
,MF
,CNAME
,SOA
,MB
,MG
,MR
,NULL
,WKS
,PTR
,HINFO
,MINFO
,MX
,TXT
,AAAA
,SRV
,NAPTR
,A6
,ASFR
,MAILB
,MAILA
,ANY
.
性能評測指標
下圖是一個示例輸出:
DNS Performance Testing Tool [Status] Processing query data [Status] Sending queries to 127.0.0.1:53 time up [Status]DNS Query Performance Testing Finish [Result]Quries sent: 35650 [Result]Quries completed: 35578 [Result]Complete percentage: 99.80% [Result]Elapsed time(s): 1.00000 [Result]Queries Per Second: 35650.0000
標准輸出中,queies sent是指本次探測發送的總請求數,queries completed是指本次探測收到響應的請求數,complete percentage是指本次探測的成功率(queies_completed/queries_sent),elapsed time是指本次探測的時間,queries per second是指本次探測的QPS。
歡迎大家試用!