“发送”;任何;使用Scapy/Python进行响应

“发送”;任何;使用Scapy/Python进行响应,python,dns,response,scapy,any,Python,Dns,Response,Scapy,Any,我试图模拟“任意”类型的DNS响应,其中使用Scapy在一个响应中发送多个记录。当我发送1条记录时,响应将完整到达,但当我在同一响应中发送多条记录时,数据包的格式将变为错误,我不确定是否在Scapy语法或其他地方有错误 以下是我正在使用的脚本: 从scapy.all导入* 随机输入 导入操作系统 def sendanswer(): ##响应的随机id setid=random.randint(11000) ##随机IP地址 s1=random.randint(193200) s2=random

我试图模拟“任意”类型的DNS响应,其中使用Scapy在一个响应中发送多个记录。当我发送1条记录时,响应将完整到达,但当我在同一响应中发送多条记录时,数据包的格式将变为错误,我不确定是否在Scapy语法或其他地方有错误

以下是我正在使用的脚本:

从scapy.all导入*
随机输入
导入操作系统
def sendanswer():
##响应的随机id
setid=random.randint(11000)
##随机IP地址
s1=random.randint(193200)
s2=random.randint(2254)
s3=random.randint(2254)
s4=random.randint(2254)
sourceIP=str(s1)+“+str(s2)+”+str(s3)+“+str(s4)
##任何有1个答案的回答/有效
any1=IP(src=sourceIP,dst=“192.168.0.100”)/UDP(sport=53,dport=53)/DNS(qr=1,id=setid,qd=DNSQR(qname=“main.domain.com”,qtype=“ALL”,qclass=“IN”),an=(DNSRR(rrname=“main_Server”,rdata=“200.200.200”,rclass=“IN”,type=“A”),ar=DNSRROPT(rclass=3000))
##具有多个答案/返回格式不正确的数据包的任何响应
any2=IP(src=sourceIP,dst=“192.168.0.100”)/UDP(sport=53,dport=53)/DNS(qr=1,id=setid,qd=DNSQR(qname=“main.domain.com”,qtype=“ALL”,qclass=“IN”),an=(DNSRR(rrname=“main_Server”,rdata=“200.200.200.200.200”,rclass=“IN”,type=“A”),DNSRR(rrname=“SOA_main_服务器”,rdata=“200.200.200.200.200”,rclass=“IN”,rclass=“IN”),rclass=3000))
##我使用Scapy的任何请求捕获了一个ANY响应,并使用了相同的值,但它返回了一个格式错误的数据包
(体育=53,dport=53)DNS(id=491,qr=1L,opcode=“查询”,aa=1L,tc=0L,tc=0L,rd=0L,aa=1L,tc=0L,rd=0.1.168.0.0.10.10.10.1.1.1.1.1,P=1.1,P=3)域名(id=491,qr=1,q1,qr=1,q1,qr=1,q1,qc=1,q1,q1,q1,Q1,q1,q1,qd=2,qd=2,DNSQR=2,qd=2,qd=2,qd=2,qd=2,qd=2,qqd=DNSQR(qqqqqqqqq)是该方方(qqqqqq(该)是该(qqqqqq)是)的(qqq=“N”,包括“N”在内的“N”,RCass=“在”,ttl=3600,rdata=“ism-ad.com.com”中的“N”,DNSRR(rr名称=“ism.com”中的,从从从从从该公司的“N”中”,N SRR(rr名称名称为该公司的意思意思是从从从从从该公司的第三方来看,包括包括从从从该公司(rr名称=“ISR)中,从从该公司,从从中,包括包括包括包括包括“ttl=3600,在”中,若若他们,从从中,从从该方,RCassassass协协协协协协据据据据据据据据据据据据据据据据据据据据据“在”,在,在,在,在,在,若若若若其其其其中,在,是,若若若若若若若其其其其第三方,从从从从中,”,”,”,”,”,”,”,”,”,”,”,”=“OPT,rclass=3000,extrcode=0,version=0,z=“D0”,rdlen=0)))
发送(任意1)
发送(任意2)
发送(cap)
系统(“iptables-A输出-s 192.168.0.11-d 192.168.0.100-p ICMP-ICMP类型端口不可访问-j DROP”)
sendanswer()

DNS应答不会作为列表添加,因此最终会导致格式错误。 您可以按以下方式创建具有多个应答的DNS数据包: 创建一个新的DNS对象,然后在其中添加所需的字段

dns = DNS()
qry1 = DNSQR(qname='www.bing.com',qtype=255)
an1 = DNSRR(rrname='www.bing.com',type=5)
an2 = DNSRR(rrname='www.bing.com',type=28,rdata='2000::1')
an3 = DNSRR(rrname='www.bing.com',type=5)
an4 = DNSRR(rrname='www.bing.com',type=1,rdata='172.1.1.6')
an5= DNSRR(rrname='www.bing.com',type=2)
dns.an = an1/an2/an3/an4/an5
packet = Ether(src = '00:0c:29:02:1d:53', dst='07:08:09:0A:0B:0C') / IPv6(src = "2000::1" , dst = "2000::4") / UDP() / DNS(raw(dns))