aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpathod/pathoc.py11
-rwxr-xr-xpathoc15
2 files changed, 22 insertions, 4 deletions
diff --git a/libpathod/pathoc.py b/libpathod/pathoc.py
index 32707899..3e83db49 100644
--- a/libpathod/pathoc.py
+++ b/libpathod/pathoc.py
@@ -15,9 +15,15 @@ class Response:
def __repr__(self):
return "Response(%s - %s)"%(self.status_code, self.msg)
+SSLVERSIONS = {
+ 1: tcp.TLSv1_METHOD,
+ 2: tcp.SSLv2_METHOD,
+ 3: tcp.SSLv3_METHOD,
+ 4: tcp.SSLv23_METHOD,
+}
class Pathoc(tcp.TCPClient):
- def __init__(self, host, port, ssl=None, sni=None, clientcert=None):
+ def __init__(self, host, port, ssl=None, sni=None, sslversion=1, clientcert=None):
tcp.TCPClient.__init__(self, host, port)
self.settings = dict(
staticdir = os.getcwd(),
@@ -25,6 +31,7 @@ class Pathoc(tcp.TCPClient):
)
self.ssl, self.sni = ssl, sni
self.clientcert = clientcert
+ self.sslversion = SSLVERSIONS[sslversion]
def http_connect(self, connect_to, wfile, rfile):
wfile.write(
@@ -50,7 +57,7 @@ class Pathoc(tcp.TCPClient):
self.http_connect(connect_to, self.wfile, self.rfile)
if self.ssl:
try:
- self.convert_to_ssl(sni=self.sni, cert=self.clientcert)
+ self.convert_to_ssl(sni=self.sni, cert=self.clientcert, method=self.sslversion)
except tcp.NetLibError, v:
raise PathocError(str(v))
diff --git a/pathoc b/pathoc
index 739f5659..de8ae948 100755
--- a/pathoc
+++ b/pathoc
@@ -60,7 +60,11 @@ if __name__ == "__main__":
"-i", dest="sni", type=str, default=False,
help="SSL Server Name Indication"
)
-
+ group.add_argument(
+ "--sslversion", dest="sslversion", type=int, default=1,
+ choices=[1, 2, 3],
+ help="Use a specified protocol - TLSv1, SSLv2, SSLv3. Default to TLSv1."
+ )
group = parser.add_argument_group(
'Controlling Output',
@@ -124,7 +128,14 @@ if __name__ == "__main__":
try:
for i in range(args.repeat):
- p = pathoc.Pathoc(args.host, port, ssl=args.ssl, sni=args.sni, clientcert=args.clientcert)
+ p = pathoc.Pathoc(
+ args.host,
+ port,
+ ssl=args.ssl,
+ sni=args.sni,
+ sslversion=args.sslversion,
+ clientcert=args.clientcert
+ )
try:
p.connect(connect_to)
except (tcp.NetLibError, pathoc.PathocError), v: