Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions pulse_xmpp_agent/config/backup_restore.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[backup_restore]
remote_user = urbackup

# La clé privée est normalement celle de reverse_ssh.
# La clé publique id_rsa.pub de reverse_ssh doit être inscrite dans /var/urbackup/authorized_keys afin de permettre l'authentification de la machine locale vers le serveur de sauvegarde.
# Sur la machine locale,
# on donne un autre nom à la même clé que id_rsa de reverse_ssh, par exemple pulseuser_backup_id_rsa.
# pulseuser_backup_id_rsa est réinstallée à chaque demande de transfert de sauvegarde en locale.
# Elle est en fait une copie de la clé privée id_rsa de reverse_ssh.
# Cela permet de diminuer le risque de corruption de la copie de la clé en cas d'erreur de plugin.
private_name_key = pulseuser_backup_id_rsa

username = pulseuser
#on utilise le profil de pulseuser

# restore_to_backup_location 'True' signifie que les fichiers récupérés seront placés dans le répertoire de sauvegarde :
# C:\Program Files\Medulla\var\backup_files pour Windows
# /var/lib/pulse2/backup_files pour Darwin ou Linux
restore_to_backup_location = True

# SSH Server machine urbackup port number
ssh_port = 22
95 changes: 95 additions & 0 deletions pulse_xmpp_agent/lib/networkinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# SPDX-FileCopyrightText: 2016-2023 Siveo <support@siveo.net>
# SPDX-License-Identifier: GPL-3.0-or-later

# FILE pulse_xmpp_agent/lib/networkinfo.py

import netifaces
import subprocess

Expand All @@ -26,6 +28,99 @@
logger = logging.getLogger()


def find_common_addresses(list1, list2):
"""
Trouve les adresses IP communes entre deux listes de réseaux CIDR.

Cette fonction prend deux listes de chaînes de caractères représentant des réseaux CIDR,
les convertit en objets IPv4Network, et recherche les adresses IP communes dans les deux listes.

Args:
list1 (list of str): Une liste de chaînes de caractères représentant des réseaux CIDR.
list2 (list of str): Une autre liste de chaînes de caractères représentant des réseaux CIDR.

Returns:
list of str: Une liste d'adresses IP communes entre les deux listes de réseaux CIDR.
"""
# Convertir les chaînes de CIDR en objets IPv4Network
cidr_list1 = [ipaddress.ip_network(cidr) for cidr in list1]
cidr_list2 = [ipaddress.ip_network(cidr) for cidr in list2]

# Chercher des adresses IP communes dans les deux listes
common_addresses = []
for net1 in cidr_list1:
for net2 in cidr_list2:
# Vérifier si les réseaux se chevauchent
if net1.overlaps(net2):
# Ajouter l'IP commune à la liste
common_addresses.append(str(net1.network_address))

return common_addresses


def get_CIDR_ipv4_addresses(exclude_localhost=True):
"""
Récupère les adresses IPv4 au format CIDR pour chaque interface réseau de la machine.

Cette fonction utilise des commandes spécifiques au système d'exploitation pour obtenir les informations
sur les interfaces réseau et les adresses IPv4. Elle retourne une liste d'adresses IPv4 au format CIDR.

Args:
exclude_localhost (bool): Si True, exclut les interfaces locales (localhost ou 127.0.0.1).

Returns:
list: Une liste d'adresses IPv4 au format CIDR (par exemple, '192.168.1.0/24').
"""
ipv4_addresses = []
# Vérifier le système d'exploitation
system = platform.system()
if system == "Windows":
# Commande pour obtenir les interfaces réseau sous Windows
output = subprocess.check_output("ipconfig", shell=True).decode()
ip, mask = None, None
for line in output.splitlines():
if "IPv4 Address" in line or "IPv4" in line:
ip = line.split(":")[-1].strip()
if "Subnet Mask" in line:
mask = line.split(":")[-1].strip()
if ip and mask:
if exclude_localhost and ip == "127.0.0.1":
continue
cidr = ipaddress.IPv4Network(
f"{ip}/{mask}", strict=False
).with_prefixlen
ipv4_addresses.append(cidr)
ip, mask = None, None
elif system == "Linux":
# Commande pour obtenir les interfaces réseau sous Linux
output = subprocess.check_output("ip addr show", shell=True).decode()
for line in output.splitlines():
line = line.strip()
if line.startswith("inet "):
parts = line.split()
ip_mask = parts[1] # Exemple : 192.168.1.100/24
if exclude_localhost and ip_mask.startswith("127.0.0.1/"):
continue
ipv4_addresses.append(ip_mask)
elif system == "Darwin": # macOS est identifié par 'Darwin'
# Commande pour obtenir les interfaces réseau sous macOS
output = subprocess.check_output("ifconfig", shell=True).decode()
current_ip = None
for line in output.splitlines():
line = line.strip()
if line.startswith("inet ") and "127.0.0.1" not in line: # Éviter localhost
parts = line.split()
ip = parts[1] # L'adresse IP est le second champ
mask = parts[3] # Le masque est généralement le quatrième champ
if exclude_localhost and ip == "127.0.0.1":
continue
cidr = ipaddress.IPv4Network(
f"{ip}/{mask}", strict=False
).with_prefixlen
ipv4_addresses.append(cidr)
return ipv4_addresses


class networkagentinfo:
def __init__(self, sessionid, action="resultgetinfo", param=[]):
self.sessionid = sessionid
Expand Down
Loading