-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathhelper.py
108 lines (100 loc) · 3.3 KB
/
helper.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# hijack helper functions
def parseHeader(buff,type='response'):
import re
SEP = '\r\n\r\n'
HeadersSEP = '\r*\n(?![\t\x20])'
import logging
log = logging.getLogger('parseHeader')
if SEP in buff:
header,body = buff.split(SEP,1)
else:
header = buff
body = ''
headerlines = re.split(HeadersSEP, header)
if len(headerlines) > 1:
r = dict()
if type == 'response':
_t = headerlines[0].split(' ',2)
if len(_t) == 3:
httpversion,_code,description = _t
else:
log.warn('Could not parse the first header line: %s' % `_t`)
return r
try:
r['code'] = int(_code)
except ValueError:
return r
elif type == 'request':
_t = headerlines[0].split(' ',2)
if len(_t) == 3:
method,uri,httpversion = _t
r['method'] = method
r['uri'] = uri
r['httpversion'] = httpversion
else:
log.warn('Could not parse the first header line: %s' % `_t`)
return r
r['headers'] = dict()
for headerline in headerlines[1:]:
SEP = ':'
if SEP in headerline:
tmpname,tmpval = headerline.split(SEP,1)
name = tmpname.lower().strip()
val = map(lambda x: x.strip(),tmpval.split(','))
else:
name,val = headerline.lower(),None
r['headers'][name] = val
r['body'] = body
return r
def getdsturl(tcpdata):
import logging
log = logging.getLogger('getdsturl')
p = parseHeader(tcpdata,type='request')
if p is None:
log.warn('parseHeader returned None')
return
if p.has_key('uri') and p.has_key('headers'):
if p['headers'].has_key('host'):
r = 'http://%s%s' % (p['headers']['host'][0],p['uri'])
return r
else:
log.warn('seems like no host header was set')
else:
log.warn('parseHeader did not give us a nice return %s' % p)
def gethost(tcpdata):
import logging
log = logging.getLogger('getdsturl')
p = parseHeader(tcpdata,type='request')
if p is None:
log.warn('parseHeader returned None')
return
if p.has_key('headers'):
if p['headers'].has_key('host'):
return p['headers']['host']
def getuseragent(tcpdata):
import logging
log = logging.getLogger('getuseragent')
p = parseHeader(tcpdata,type='request')
if p is None:
log.warn('parseHeader returned None')
return
if p.has_key('headers'):
if p['headers'].has_key('user-agent'):
return p['headers']['user-agent']
def calcloglevel(options):
logginglevel = 30
if options.verbose is not None:
if options.verbose >= 3:
logginglevel = 10
else:
logginglevel = 30-(options.verbose*10)
if options.quiet:
logginglevel = 50
return logginglevel
def getcookie(tcpdata):
p = parseHeader(tcpdata,type='request')
if p is None:
return
if p.has_key('headers'):
if p['headers'].has_key('cookie'):
return p['headers']['cookie']