forked from bortzmeyer/grong
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest-scapy.py
executable file
·69 lines (59 loc) · 1.53 KB
/
test-scapy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/python
from scapy.all import *
import sys
import getopt
dst=None
dport = 53
qname = "www.slashdot.org"
def usage(msg=None):
print >>sys.stderr, "Usage: %s -s server-to-query [-p port-to-use] [-q query]" % sys.argv[0]
if msg is not None:
print >>sys.stderr, msg
try:
optlist, args = getopt.getopt (sys.argv[1:], "s:p:q:h",
["server=", "port=", "query", "help"])
for option, value in optlist:
if option == "--help" or option == "-h":
usage()
sys.exit(0)
elif option == "--server" or option == "-s":
dst = value
elif option == "--query" or option == "-q":
qname = value
elif option == "--port" or option == "-p":
dport = int(value)
else:
# Should never occur, it is trapped by getopt
print >>sys.stderr, "Unknown option %s" % option
usage()
sys.exit(1)
except getopt.error, reason:
usage(reason)
sys.exit(1)
if len(args) != 0:
usage()
sys.exit(1)
p = IP(dst=dst)/UDP(sport=RandShort(),dport=dport)/DNS(rd=1,qd=DNSQR(qname=qname))
# Send a normal packet
sr1(p)
# Send a packet with a wrong qdcount
p.qdcount = 0
sr1(p)
p.qdcount = 2
sr1(p)
# Modify the length field of a label
s = str(p)
s2 = s[:44] + '\x030' + s[45:]
p2 = IP(s2)
p2[UDP].sport=RandShort()
del p2[UDP].chksum
sr1(p2)
# Truncates the packet
s2 = s[:-4]
p2 = IP(s2)
p2[UDP].sport=RandShort()
del p2[IP].len
del p2[IP].chksum
del p2[UDP].len
del p2[UDP].chksum
sr1(p2)