1、对于dns的流量模拟我模拟了两种方式,一种是直接构造DNS数据包,一种是使用nslookup命令来进行
(1) 对于直接构造pcap包进行DNS解析代码如下:
def dns_senrch(dns_URL): #向dns服务发送dns请求
socket.setdefaulttimeout(10)
mysocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
msg = b'\x5c\x6d\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x05baidu\x03com\x00\x00\x01\x00\x01' #16进制的dns报文,请求解析百度的ip
mysocket.sendto(msg,(dns_URL,53))
receive=mysocket.recv(4096)
print str(receive).encode('hex') #收到dns返回的报文并以16进制打印
print str(receive)
可以看到首先要设置socket超时时间,方式函数无网络或者其他情况造成的socket阻塞,然后构造一个标准的DNS包,然后将包加入到socket中,将socket发送后再等待socket的回传,并将回传包的DNS内容使用16进制直接打印出来
(2) 第二种则是直接使用nslookup命令,简单易懂代码如下:
def dns(ip_domain,dns_url):
command=os.popen('nslookup '+ip_domain+' '+dns_url)
print command.read()
command.close()
直接用os.popen()函数调用nslookup命令并填写要解析的DNS域名或IP和DNS服务器地址