From ba885b9345024809555d1a2c1f8cc463870602bb Mon Sep 17 00:00:00 2001 From: lgandx Date: Thu, 9 Dec 2021 22:38:44 -0300 Subject: [PATCH] added the ability to provide external IP on WPAD poison via DHCP --- poisoners/DHCP.py | 2 +- settings.py | 14 ++++++++------ utils.py | 12 ++++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/poisoners/DHCP.py b/poisoners/DHCP.py index 52c0857..94a18e5 100755 --- a/poisoners/DHCP.py +++ b/poisoners/DHCP.py @@ -79,7 +79,7 @@ config.read(os.path.join(BASEDIR,'Responder.conf')) RespondTo = [_f for _f in [x.upper().strip() for x in config.get('Responder Core', 'RespondTo').strip().split(',')] if _f] DontRespondTo = [_f for _f in [x.upper().strip() for x in config.get('Responder Core', 'DontRespondTo').strip().split(',')] if _f] Interface = settings.Config.Interface -Responder_IP = FindLocalIP(Interface, None) +Responder_IP = RespondWithIP() ROUTERIP = Responder_IP # Set to Responder_IP in case we fall on a static IP network and we don't get a DHCP Offer. This var will be updated with the real dhcp IP if present. NETMASK = "255.255.255.0" DNSIP = "0.0.0.0" diff --git a/settings.py b/settings.py index 4dbb031..01a72c6 100755 --- a/settings.py +++ b/settings.py @@ -23,7 +23,7 @@ import subprocess from utils import * -__version__ = 'Responder 3.0.8.0' +__version__ = 'Responder 3.0.9.0' class Settings: @@ -131,11 +131,7 @@ class Settings: self.Verbose = options.Verbose self.ProxyAuth_On_Off = options.ProxyAuth_On_Off self.CommandLine = str(sys.argv) - - if self.ExternalIP: - self.ExternalIPAton = socket.inet_aton(self.ExternalIP) - - self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) + self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) if self.Interface == "ALL": self.Bind_To_ALL = True @@ -146,6 +142,12 @@ class Settings: self.IP_aton = socket.inet_aton(self.OURIP) else: self.IP_aton = socket.inet_aton(self.Bind_To) + + if self.ExternalIP: + self.ExternalIPAton = socket.inet_aton(self.ExternalIP) + self.ExternalResponderIP = utils.RespondWithIP() + else: + self.ExternalResponderIP = self.Bind_To self.Os_version = sys.platform diff --git a/utils.py b/utils.py index 3646cde..2da16be 100755 --- a/utils.py +++ b/utils.py @@ -128,6 +128,18 @@ def RespondWithIPAton(): else: return settings.Config.IP_aton.decode('latin-1') +def RespondWithIP(): + if settings.Config.PY2OR3 == "PY2": + if settings.Config.ExternalIP: + return settings.Config.ExternalIP + else: + return settings.Config.Bind_To + else: + if settings.Config.ExternalIP: + return settings.Config.ExternalIP + else: + return settings.Config.Bind_To + def OsInterfaceIsSupported(): if settings.Config.Interface != "Not set": return not IsOsX()