some interfaces where missing when checking if an address is local
This commit is contained in:
parent
a4ca2865c4
commit
f85559e15c
3 changed files with 13 additions and 29 deletions
|
@ -5,6 +5,7 @@ sortedcontainers
|
||||||
numpy
|
numpy
|
||||||
|
|
||||||
# networking
|
# networking
|
||||||
|
netifaces
|
||||||
msgpack
|
msgpack
|
||||||
|
|
||||||
# cryptography
|
# cryptography
|
||||||
|
|
|
@ -6,6 +6,7 @@ import zlib
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import bidict
|
import bidict
|
||||||
|
import netifaces
|
||||||
|
|
||||||
from source import packets, utils, structures
|
from source import packets, utils, structures
|
||||||
from source.behaviors import roles
|
from source.behaviors import roles
|
||||||
|
@ -23,6 +24,7 @@ class CommunicationManager:
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
|
|
||||||
self.broadcast_address = broadcast_address
|
self.broadcast_address = broadcast_address
|
||||||
|
self.interface = interface
|
||||||
self.port = port
|
self.port = port
|
||||||
|
|
||||||
# create an IPv6 UDP socket
|
# create an IPv6 UDP socket
|
||||||
|
@ -221,14 +223,15 @@ class CommunicationManager:
|
||||||
# decode the payload
|
# decode the payload
|
||||||
return self.packet_decode(payload), address
|
return self.packet_decode(payload), address
|
||||||
|
|
||||||
@staticmethod
|
def get_local_hosts(self) -> typing.Iterator[str]:
|
||||||
def get_local_addresses() -> list[tuple]:
|
|
||||||
"""
|
"""
|
||||||
Get the local addresses of the machine
|
Get the local hosts addresses of the machine
|
||||||
:return: the local addresses of the machine
|
:return: the local hosts addresses of the machine
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return socket.getaddrinfo(socket.gethostname(), None)
|
for interface_id, interface_addresses in netifaces.ifaddresses(self.interface).items():
|
||||||
|
for interface_address in interface_addresses:
|
||||||
|
yield interface_address["addr"].split("%")[0]
|
||||||
|
|
||||||
def is_address_local(self, address: tuple) -> bool:
|
def is_address_local(self, address: tuple) -> bool:
|
||||||
"""
|
"""
|
||||||
|
@ -238,28 +241,8 @@ class CommunicationManager:
|
||||||
|
|
||||||
host, _, _, scope = address
|
host, _, _, scope = address
|
||||||
|
|
||||||
# check for all the interfaces of our machine
|
# check if the host is in our local hosts list
|
||||||
for interface in self.get_local_addresses():
|
return host in list(self.get_local_hosts())
|
||||||
# unpack the interface information
|
|
||||||
interface_family, _, _, _, interface_address = interface
|
|
||||||
|
|
||||||
match interface_family:
|
|
||||||
case socket.AddressFamily.AF_INET:
|
|
||||||
interface_host, interface_port = interface_address
|
|
||||||
|
|
||||||
# check if it matches the address interface
|
|
||||||
if host == interface_host:
|
|
||||||
return True
|
|
||||||
|
|
||||||
case socket.AddressFamily.AF_INET6:
|
|
||||||
interface_host, interface_port, interface_flowinfo, interface_scope = interface_address
|
|
||||||
|
|
||||||
# check if it matches the address interface
|
|
||||||
if host == interface_host and scope == interface_scope:
|
|
||||||
return True
|
|
||||||
|
|
||||||
# no matching interfaces have been found
|
|
||||||
return False
|
|
||||||
|
|
||||||
def save_trusted_peers(self) -> None:
|
def save_trusted_peers(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -9,9 +9,9 @@ class Peer:
|
||||||
master: bool = dataclasses.field()
|
master: bool = dataclasses.field()
|
||||||
|
|
||||||
# public asymmetric key
|
# public asymmetric key
|
||||||
public_key: bytes = dataclasses.field()
|
public_key: bytes = dataclasses.field(repr=False)
|
||||||
# secret symmetric key
|
# secret symmetric key
|
||||||
secret_key: Optional[bytes] = dataclasses.field(default=None)
|
secret_key: Optional[bytes] = dataclasses.field(default=None, repr=False)
|
||||||
|
|
||||||
# is the machine trusted
|
# is the machine trusted
|
||||||
trusted: bool = dataclasses.field(default=False)
|
trusted: bool = dataclasses.field(default=False)
|
||||||
|
|
Loading…
Reference in a new issue