【发布时间】:2014-12-18 16:48:36
【问题描述】:
我正在尝试模拟“ANY”类型的 DNS 响应,其中使用 Scapy 在 1 个响应中发送多个记录。当我发送 1 条记录时,响应完好无损,但是当我在同一个响应中发送多个记录时,数据包格式错误,我不确定 Scapy 语法或其他地方是否有错误。
这是我正在使用的脚本:
from scapy.all import *
import random
import os
def sendanswer():
##random id for response
setid = random.randint(1,1000)
##random IP address
s1 = random.randint(193,200)
s2 = random.randint(2,254)
s3 = random.randint(2,254)
s4 = random.randint(2,254)
sourceIP = str(s1)+"."+str(s2)+"."+str(s3)+"."+str(s4)
##Any response with 1 answer/Works
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.200",rclass="IN",type="A")),ar=DNSRROPT(rclass=3000))
##Any response with multiple answers/Returns Malformed Packet
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",rclass="IN",type="A"),DNSRR(rrname="SOA_Main_Server",rdata="200.200.200.200",rclass="IN",type="SOA")),ar=DNSRROPT(rclass=3000))
##I Captured an ANY response using ANY request from Scapy and used same values but it Returns a Malformed Packet
cap = IP(dst="192.168.0.100",proto="udp")/UDP(sport=53,dport=53)/DNS(id=491,qr=1L,opcode="QUERY",aa=1L,tc=0L,rd=0L,ra=1L,z=0L,ad=0L,cd=0L,rcode="ok",qdcount=1,ancount=3,nscount=0,arcount=2,qd=DNSQR(qname='ism.com.',qtype="ALL",qclass="IN"),an=(DNSRR(rrname="ism.com.",type="A",rclass="IN",ttl=600,rdata="192.168.0.100"),DNSRR(rrname="ism.com.",type="NS",rclass="IN",ttl=3600,rdata="ism-ad.ism.com."),DNSRR(rrname="ism.com.",type="SOA",rclass="IN",ttl=3600,rdata="\xc05\nhostmaster\xc0\x0c\x00\x00\x00/\x00\x00\x03\x84\x00\x00\x02X\x00\x01Q\x80\x00\x00\x0e\x10")),ns=None,ar=(DNSRR(rrname="ism-ad.ism.com.",type="A",rclass="IN",ttl=3600,rdata="192.168.0.100"),(DNSRROPT(rrname=".",type="OPT",rclass=3000,extrcode=0,version=0,z="D0",rdlen=0))))
send(any1)
send(any2)
send(cap)
os.system("iptables -A OUTPUT -s 192.168.0.11 -d 192.168.0.100 -p ICMP --icmp-type port-unreachable -j DROP")
sendanswer()
感谢您就该主题提出任何意见,谢谢。
【问题讨论】:
标签: python dns response scapy any