1. 描寫敘述
使用scapy庫,編寫一個DNS Fuzzer工具,並測試。在這之前。先說明一下DNS協議請求包是封裝在IP包中的UDP包(有些情況也可使用TCP)中。且UDP的端口為53。
進入scapy。查看一下UDP和DNS包的封裝情況。

2. 代碼演示樣例
代碼中,我們須要對輸入的IP地址做合法性校驗。
這須要用到netaddr中的valid_ipv4,能夠執行sudo pip install netaddr進行安裝。假設系統上沒有安裝pip。能夠先安裝pip,Ubuntu上執行sudo apt-get install python-pip進行安裝。
from scapy.all import *
from netaddr import valid_ipv4
import sys,getopt
def usage():
print "Usage: sudo ./DnsFuzzer.py [-i interface][-l][target ip]"
print "-i:指定網卡接口"
print "-l:循環發送"
def main(argv):
loopsend = 0
try:
opts, args = getopt.getopt(argv, "hi:l")
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h"):
usage()
sys.exit()
elif opt in ("-i"):
conf.iface = arg
elif opt in ("-l"):
loopsend = 1
if len(args) > 0:
if not valid_ipv4(args[0],flags=1):
print "IP 地址不合法"
sys.exit(2)
a = fuzz(IP(dst=args[0])/UDP(dport=53)/DNS(qd=fuzz(DNSQR()), an = fuzz(DNSRR())))
send(a,loop=loopsend)
if __name__ == "__main__":
main(sys.argv[1:])
