python 使用scapy编写DNS Fuzzer

1. 描写叙述

  使用scapy库,编写一个DNS Fuzzer工具,并測试。在这之前。先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中。且UDP的端口为53。

进入scapy。查看一下UDP和DNS包的封装情况。
  pkt


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:])
posted @ 2017-05-15 19:28  mfmdaoyou  阅读(2207)  评论(0编辑  收藏  举报