diff options
-rw-r--r-- | libpathod/pathoc.py | 11 | ||||
-rwxr-xr-x | pathoc | 15 |
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)) @@ -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: |