-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproxpy.py
executable file
·105 lines (81 loc) · 2.72 KB
/
proxpy.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
#!/usr/bin/env python
"""
Copyright notice
================
Copyright (C) 2011
Roberto Paleari <[email protected]>
Alessandro Reina <[email protected]>
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
HyperDbg is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
"""
import sys
import getopt
from core import *
def show_help():
print """\
Syntax: python %s <options>
-a <addr> listen address (default 0.0.0.0)
-d <filename> on termination, dump requests & responses to file
-h show this help screen
-p <port> listen port (default 8080)
-r <host:[port]> redirect HTTP traffic to target host (default port: 80)
-v be more verbose
-x <filename> load a ProxPy plugin
""" % sys.argv[0]
def parse_options():
try:
opts, args = getopt.getopt(sys.argv[1:], "a:d:hp:r:vx:")
except getopt.GetoptError, e:
print str(e)
show_help()
exit(1)
opts = dict([(k.lstrip('-'), v) for (k,v) in opts])
if 'h' in opts:
show_help()
exit(0)
ps = ProxyState()
if 'v' in opts:
ps.log.verbosity += 1
if 'd' in opts:
ps.dumpfile = opts['d']
if 'p' in opts:
ps.listenport = int(opts['p'])
if 'a' in opts:
ps.listenaddr = opts['a']
# Check and parse redirection host
if 'r' in opts:
h = opts['r']
if ':' not in h:
p = 80
else:
h,p = h.split(':')
p = int(p)
ps.redirect = (h, p)
# Load an external plugin
if 'x' in opts:
ps.plugin = ProxyPlugin(opts['x'])
return ps
def main():
global proxystate
proxystate = parse_options()
proxyServer = ProxyServer(proxystate)
proxyServer.startProxyServer()
if __name__ == "__main__":
global proxystate
try:
main()
except KeyboardInterrupt, e:
nreq, nres = proxystate.history.count()
proxystate.log.info("Terminating... [%d requests, %d responses]" % (nreq, nres))
if proxystate.dumpfile is not None:
data = proxystate.history.dumpXML()
f = open(proxystate.dumpfile, 'w')
f.write(data)
f.close()