feat: add functionality to retrieve and bind IP address of network interfaces

This commit is contained in:
Vxrtrauter
2026-02-06 17:50:42 +01:00
parent 4589322f0a
commit 6be1784903
4 changed files with 42 additions and 8 deletions
+9 -1
View File
@@ -41,4 +41,12 @@ def list_interfaces() -> None:
def init_interfaces():
state.interfaces = list(addrs.keys())
state.active_interfaces = get_active_interfaces()
state.active_interfaces = get_active_interfaces()
def get_interface_ip(interface_name):
if interface_name in addrs:
for addr in addrs[interface_name]:
if addr.family == 2: # ipv4
if not addr.address.startswith("127.") and not addr.address.startswith("169.254"):
return addr.address
return None
+25 -2
View File
@@ -1,5 +1,6 @@
import time
from core.utils.general.wrappers import run_thread
from core.network.interface import get_interface_ip
import threading
import libtorrent as lt
from core.utils.data.state import state
@@ -15,6 +16,7 @@ def init_session():
state.dl_session = lt.session()
settings = {
"upload_rate_limit": state.up_speed_limit,
"download_rate_limit": state.down_speed_limit,
@@ -26,8 +28,15 @@ def init_session():
"connections_limit": state.max_connections,
"active_downloads": state.max_downloads
}
if state.bound_interface:
interface_ip = get_interface_ip(state.bound_interface)
if interface_ip:
settings["outgoing_interfaces"] = interface_ip
settings["listen_interfaces"] = f"{interface_ip}:6881"
consoleLog(f"Binding to Interface IP: {interface_ip}")
else:
consoleLog(f"Error finding IP for Interface {state.bound_interface}")
state.dl_session.apply_settings(settings)
@@ -45,7 +54,6 @@ def add_download(magnet_uri, dl_path=state.download_path):
consoleLog("Skipping, download already running...")
return
magnetdl = lt.parse_magnet_uri(magnet_uri)
magnetdl.save_path = dl_path
@@ -98,6 +106,21 @@ def update_settings():
"connections_limit": state.max_connections,
"active_downloads": state.max_downloads
}
if state.bound_interface:
interface_ip = get_interface_ip(state.bound_interface)
if interface_ip:
settings["outgoing_interfaces"] = interface_ip
settings["listen_interfaces"] = f"{interface_ip}:6881"
consoleLog(f"Binding to Interface IP: {interface_ip}")
else:
consoleLog(f"Error finding IP for Interface {state.bound_interface}")
state.dl_session.apply_settings(settings)
def update_bound_interface():
settings = { "outgoing_interfaces": state.bound_interface }
state.dl_session.apply_settings(settings)