python 使用scapy编写DNS Fuzzer

1. 描述

  使用scapy库,编写一个DNS Fuzzer工具,并测试。在这之前,先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中,且UDP的端口为53。进入scapy,查看一下UDP和DNS包的封装情况。
  python 使用scapy编写DNS Fuzzer_第1张图片

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:])

你可能感兴趣的:(python,Scapy,DNS-fuzzer)