From ce211f7fcfa7ea9e3431161fec5075ca63730070 Mon Sep 17 00:00:00 2001 From: lgandx Date: Wed, 12 Oct 2016 00:24:31 -0300 Subject: [PATCH] Fixed the bind to interface issue (https://github.com/lgandx/Responder/issues/6) --- Responder.py | 37 ++++++++++++++++++++++++++----------- settings.py | 23 ++++++++++++++++++++--- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/Responder.py b/Responder.py index 996fc28..ed238d5 100755 --- a/Responder.py +++ b/Responder.py @@ -66,7 +66,10 @@ class ThreadingUDPServer(ThreadingMixIn, UDPServer): def server_bind(self): if OsInterfaceIsSupported(): try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') + if settings.Config.Bind_To_ALL: + pass + else: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Interface+'\0') except: pass UDPServer.server_bind(self) @@ -75,7 +78,10 @@ class ThreadingTCPServer(ThreadingMixIn, TCPServer): def server_bind(self): if OsInterfaceIsSupported(): try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') + if settings.Config.Bind_To_ALL: + pass + else: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Interface+'\0') except: pass TCPServer.server_bind(self) @@ -84,7 +90,10 @@ class ThreadingTCPServerAuth(ThreadingMixIn, TCPServer): def server_bind(self): if OsInterfaceIsSupported(): try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') + if settings.Config.Bind_To_ALL: + pass + else: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Interface+'\0') except: pass self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0)) @@ -101,7 +110,10 @@ class ThreadingUDPMDNSServer(ThreadingMixIn, UDPServer): if OsInterfaceIsSupported(): try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') + if settings.Config.Bind_To_ALL: + pass + else: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Interface+'\0') except: pass UDPServer.server_bind(self) @@ -109,7 +121,6 @@ class ThreadingUDPMDNSServer(ThreadingMixIn, UDPServer): class ThreadingUDPLLMNRServer(ThreadingMixIn, UDPServer): def server_bind(self): MADDR = "224.0.0.252" - self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) @@ -117,7 +128,10 @@ class ThreadingUDPLLMNRServer(ThreadingMixIn, UDPServer): if OsInterfaceIsSupported(): try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') + if settings.Config.Bind_To_ALL: + pass + else: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Interface+'\0') except: pass UDPServer.server_bind(self) @@ -130,7 +144,7 @@ ThreadingTCPServerAuth.allow_reuse_address = 1 def serve_thread_udp_broadcast(host, port, handler): try: - server = ThreadingUDPServer(('', port), handler) + server = ThreadingUDPServer((host, port), handler) server.serve_forever() except: print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." @@ -150,12 +164,13 @@ def serve_LLMNR_poisoner(host, port, handler): server = ThreadingUDPLLMNRServer((host, port), handler) server.serve_forever() except: + raise print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." def serve_thread_udp(host, port, handler): try: if OsInterfaceIsSupported(): - server = ThreadingUDPServer((settings.Config.Bind_To, port), handler) + server = ThreadingUDPServer((host, port), handler) server.serve_forever() else: server = ThreadingUDPServer((host, port), handler) @@ -166,7 +181,7 @@ def serve_thread_udp(host, port, handler): def serve_thread_tcp(host, port, handler): try: if OsInterfaceIsSupported(): - server = ThreadingTCPServer((settings.Config.Bind_To, port), handler) + server = ThreadingTCPServer((host, port), handler) server.serve_forever() else: server = ThreadingTCPServer((host, port), handler) @@ -177,7 +192,7 @@ def serve_thread_tcp(host, port, handler): def serve_thread_tcp_auth(host, port, handler): try: if OsInterfaceIsSupported(): - server = ThreadingTCPServerAuth((settings.Config.Bind_To, port), handler) + server = ThreadingTCPServerAuth((host, port), handler) server.serve_forever() else: server = ThreadingTCPServerAuth((host, port), handler) @@ -192,7 +207,7 @@ def serve_thread_SSL(host, port, handler): key = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLKey) if OsInterfaceIsSupported(): - server = ThreadingTCPServer((settings.Config.Bind_To, port), handler) + server = ThreadingTCPServer((host, port), handler) server.socket = ssl.wrap_socket(server.socket, certfile=cert, keyfile=key, server_side=True) server.serve_forever() else: diff --git a/settings.py b/settings.py index e44c772..b8fe3a1 100644 --- a/settings.py +++ b/settings.py @@ -20,7 +20,7 @@ import subprocess from utils import * -__version__ = 'Responder 2.3.2.8' +__version__ = 'Responder 2.3.2.9' class Settings: @@ -69,6 +69,10 @@ class Settings: print utils.color("Error: -I mandatory option is missing", 1) sys.exit(-1) + if options.Interface == "ALL" and options.OURIP == None: + print utils.color("Error: -i is missing.\nWhen using -I ALL you need to provide your current ip address", 1) + sys.exit(-1) + # Config parsing config = ConfigParser.ConfigParser() config.read(os.path.join(self.ResponderPATH, 'Responder.conf')) @@ -175,8 +179,21 @@ class Settings: if self.HtmlToInject is None: self.HtmlToInject = '' - self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) - self.IP_aton = socket.inet_aton(self.Bind_To) + self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) + + if self.Interface == "ALL": + self.Bind_To_ALL = True + else: + self.Bind_To_ALL = False + + + self.IP_aton = socket.inet_aton(self.Bind_To) + + if self.Interface == "ALL": + self.IP_aton = socket.inet_aton(self.OURIP) + else: + self.IP_aton = socket.inet_aton(self.Bind_To) + self.Os_version = sys.platform # Set up Challenge