Reference
http://danmcinerney.org/reliable-dns-spoofing-with-python-scapy-nfqueue/
I installed the latest scapy from the source.
You can install scapy via apt-get, by entering apt-get install python-scapy.
| 
root@ubuntu:~# tail -1 /etc/lsb-release  
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS" 
# unzip scapy-2.3.1.zip  
# cd scapy-2.3.1/ 
# python setup.py install | 
Here is an example of how to dump DNS packets.
| 
# cat sniff_udp53.py  
#!/usr/bin/env python 
from scapy.all import * 
def callback(pkt): 
    if pkt.haslayer(UDP): 
        #print pkt.summary() 
        #print pkt.show() 
 return pkt[UDP].show() 
if __name__ == '__main__': 
    sniff(filter="udp port 53", prn=callback, store=0, iface="eth0") | 
| 
# dig @8.8.8.8 www.google.com  | 
You can see DNS requests and responses.
| 
# python sniff_udp53.py  
WARNING: No route found for IPv6 destination :: (no default route?) 
###[ UDP ]### 
  sport     = 55499 
  dport     = domain 
  len       = 51 
  chksum    = 0x4b02 
###[ DNS ]### 
     id        = 21379 
     qr        = 0L 
     opcode    = QUERY 
     aa        = 0L 
     tc        = 0L 
     rd        = 1L 
     ra        = 0L 
     z         = 0L 
     ad        = 1L 
     cd        = 0L 
     rcode     = ok 
     qdcount   = 1 
     ancount   = 0 
     nscount   = 0 
     arcount   = 1 
     \qd        \ 
      |###[ DNS Question Record ]### 
      |  qname     = 'www.google.com.' 
      |  qtype     = A 
      |  qclass    = IN 
     an        = None 
     ns        = None 
     \ar        \ 
      |###[ DNS OPT Resource Record ]### 
      |  rrname    = '.' 
      |  type      = OPT 
      |  rclass    = 4096 
      |  extrcode  = 0 
      |  version   = 0 
      |  z         = 0L 
      |  rdlen     = 0 
      |  \rdata     \ 
###[ UDP ]### 
  sport     = domain 
  dport     = 55499 
  len       = 131 
  chksum    = 0x643e 
###[ DNS ]### 
     id        = 21379 
     qr        = 1L 
     opcode    = QUERY 
     aa        = 0L 
     tc        = 0L 
     rd        = 1L 
     ra        = 1L | 
dump only DNS requests
| 
# cat sniff_DNS_requests.py  
#!/usr/bin/env python 
from scapy.all import * 
def callback(pkt): 
    if pkt.dport == 53: 
        #print pkt.summary() 
        #print pkt.show() 
 return pkt[UDP].show() 
if __name__ == '__main__': 
    sniff(filter="udp port 53", prn=callback, store=0, iface="eth0") | 
If you replace pkt.dport == 53 with pkt.sport ==53, you can see only DNS responses.
| 
# cat sniff_DNS_responses.py  
#!/usr/bin/env python 
from scapy.all import * 
def callback(pkt): 
    #if pkt.haslayer(DNSQR): 
    if pkt.sport == 53: 
        #print pkt.summary() 
        #print pkt.show() 
 return pkt[UDP].show() 
if __name__ == '__main__': 
    sniff(filter="udp port 53", prn=callback, store=0, iface="eth0") | 
You can dump only DNS data if you modify 
from
| 
return pkt[UDP].show() | 
to
| 
return pkt[DNS].show() | 
dump only qname
| 
# grep -v '#' sniff_DNS_requests.py  
from scapy.all import * 
def callback(pkt): 
    if pkt.dport == 53: 
        return pkt[DNS].qd.qname 
if __name__ == '__main__': 
    sniff(filter="udp port 53", prn=callback, store=0, iface="eth0") | 
| 
# ./sniff_DNS_requests.py  
WARNING: No route found for IPv6 destination :: (no default route?) 
www.google.com. 
www.google.co.jp. | 

No comments:
Post a Comment
Note: Only a member of this blog may post a comment.