From 2b8b95da2b82208c2d2c813f6942e37def3f05bd Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 19 Aug 2021 20:13:53 +0200 Subject: [PATCH] Added config options for TCP server interface binding to network interface instead of IP. --- RNS/Interfaces/TCPInterface.py | 12 +++++++++++- RNS/Reticulum.py | 13 +++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/RNS/Interfaces/TCPInterface.py b/RNS/Interfaces/TCPInterface.py index fa63b6e..0ad1be0 100644 --- a/RNS/Interfaces/TCPInterface.py +++ b/RNS/Interfaces/TCPInterface.py @@ -1,6 +1,7 @@ from .Interface import Interface import socketserver import threading +import netifaces import socket import time import sys @@ -127,12 +128,21 @@ class TCPClientInterface(Interface): class TCPServerInterface(Interface): + @staticmethod + def get_address_for_if(name): + return netifaces.ifaddresses(name)[netifaces.AF_INET][0]['addr'] - def __init__(self, owner, name, bindip=None, bindport=None): + def get_broadcast_for_if(name): + return netifaces.ifaddresses(name)[netifaces.AF_INET][0]['broadcast'] + + def __init__(self, owner, name, device=None, bindip=None, bindport=None): self.IN = True self.OUT = False self.name = name + if device != None: + bindip = TCPServerInterface.get_address_for_if(device) + if (bindip != None and bindport != None): self.receives = True self.bind_ip = bindip diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index 68d9741..9a1fe6b 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -249,11 +249,20 @@ class Reticulum: if c["type"] == "TCPServerInterface": + device = c["device"] if "device" in c else None + port = int(c["port"]) if "port" in c else None + listen_ip = c["listen_ip"] if "listen_ip" in c else None + listen_port = int(c["listen_port"]) if "listen_port" in c else None + + if port != None: + listen_port = port + interface = TCPInterface.TCPServerInterface( RNS.Transport, name, - c["listen_ip"], - int(c["listen_port"]) + device, + listen_ip, + listen_port ) if "outgoing" in c and c.as_bool("outgoing") == True: