From a4c76bd1c6aafdea5b1d5b45dbf70e83bcf6581e Mon Sep 17 00:00:00 2001 From: Alexandre Sicard Date: Tue, 26 Jun 2012 02:54:53 +0200 Subject: [PATCH 1/2] Support IPv6 brackets notation in utils/websockify Parse square brackets-enclosed IPv6 in util/websockify for 'source_addr' and 'target_addr' parameters. --- utils/websockify | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/websockify b/utils/websockify index 550dff7a..d4449a4d 100755 --- a/utils/websockify +++ b/utils/websockify @@ -260,6 +260,7 @@ def websockify_init(): # Parse host:port and convert ports to numbers if args[0].count(':') > 0: opts.listen_host, opts.listen_port = args[0].rsplit(':', 1) + opts.listen_host = opts.listen_host.strip('[]') else: opts.listen_host, opts.listen_port = '', args[0] @@ -272,6 +273,7 @@ def websockify_init(): else: if args[1].count(':') > 0: opts.target_host, opts.target_port = args[1].rsplit(':', 1) + opts.target_host = opts.target_host.strip('[]') else: parser.error("Error parsing target") try: opts.target_port = int(opts.target_port) From d235b24f216a3073d895ea788af9550cdc623f14 Mon Sep 17 00:00:00 2001 From: Alexandre Sicard Date: Tue, 26 Jun 2012 03:10:40 +0200 Subject: [PATCH 2/2] Allow preference of IPv6 for source_addr in websockify Add the option "-6, --prefer-ipv6" to util/websockify. When set, the 'prefer_ipv6' flag in util/websocket.py is used so that 'source_addr' is resolved to IPv6 if available. If 'source_addr' is not set, binds to [::]. --- utils/websocket.py | 3 ++- utils/websockify | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/utils/websocket.py b/utils/websocket.py index d3bb48cb..c4ee00e5 100644 --- a/utils/websocket.py +++ b/utils/websocket.py @@ -109,6 +109,7 @@ Sec-WebSocket-Accept: %s\r self.verbose = verbose self.listen_host = listen_host self.listen_port = listen_port + self.prefer_ipv6 = source_is_ipv6 self.ssl_only = ssl_only self.daemon = daemon self.run_once = run_once @@ -801,7 +802,7 @@ Sec-WebSocket-Accept: %s\r is a WebSockets client then call new_client() method (which must be overridden) for each new client connection. """ - lsock = self.socket(self.listen_host, self.listen_port) + lsock = self.socket(self.listen_host, self.listen_port, False, self.prefer_ipv6) if self.daemon: self.daemonize(keepfd=lsock.fileno(), chdir=self.web) diff --git a/utils/websockify b/utils/websockify index d4449a4d..cc75405a 100755 --- a/utils/websockify +++ b/utils/websockify @@ -242,6 +242,9 @@ def websockify_init(): choices=["exit", "ignore", "respawn"], help="action to take when the wrapped program exits " "or daemonizes: exit (default), ignore, respawn") + parser.add_option("--prefer-ipv6", "-6", + action="store_true", dest="source_is_ipv6", + help="prefer IPv6 when resolving source_addr") (opts, args) = parser.parse_args() # Sanity checks