import os import datetime from pathlib import Path import netifaces import requests # SDSAT/bin/interfaces.py -> SDSAT/logs/ DEFAULT_LOG_DIR = str(Path(__file__).resolve().parent.parent / "logs") def get_mac_addresses(): interfaces = netifaces.interfaces() mac_addresses = [] for interface in interfaces: try: mac = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]["addr"] mac_addresses.append(mac) except KeyError: pass return mac_addresses def get_interface_info(mac_address): interfaces = netifaces.interfaces() for interface in interfaces: try: addresses = netifaces.ifaddresses(interface) mac = addresses[netifaces.AF_LINK][0]["addr"] if mac == mac_address: ip = addresses[netifaces.AF_INET][0]["addr"] name = interface return ip, name except KeyError: pass return None, None def get_public_ip(): try: response = requests.get("https://api.ipify.org?format=json", timeout=5) data = response.json() return data["ip"] except requests.RequestException: return None def create_hostname(public_ip): if public_ip: return "SDSAT-" + public_ip.replace(".", "") return None def get_network_interface_info(): mac_addresses = get_mac_addresses() interface_info = [] for mac_address in mac_addresses: ip, name = get_interface_info(mac_address) if ip and name: interface_info.append((mac_address, ip, name)) return interface_info def write_log(action, log_dir=DEFAULT_LOG_DIR): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") log_entry = f"{current_time} : {action}" os.makedirs(log_dir, exist_ok=True) log_file_path = os.path.join(log_dir, "interfaces_check_log.txt") with open(log_file_path, "a", encoding="utf-8") as log_file: log_file.write(log_entry + "\n") def main(log_dir=DEFAULT_LOG_DIR): interface_info = get_network_interface_info() if len(interface_info) > 0: write_log("Informations sur les interfaces reseau :", log_dir=log_dir) for mac_address, ip, name in interface_info: write_log(f"Adresse MAC : {mac_address}", log_dir=log_dir) write_log(f"Adresse IP : {ip}", log_dir=log_dir) write_log(f"Nom de l'interface : {name}", log_dir=log_dir) write_log("", log_dir=log_dir) else: write_log("Aucune carte reseau trouvee.", log_dir=log_dir) public_ip = get_public_ip() hostname = create_hostname(public_ip) if hostname: write_log(f"Adresse IP publique : {public_ip}", log_dir=log_dir) write_log(f"Hostname : {hostname}", log_dir=log_dir) else: write_log("Impossible de recuperer l'adresse IP publique.", log_dir=log_dir) if __name__ == "__main__": main()