-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalcmask.py
More file actions
142 lines (115 loc) · 4.5 KB
/
calcmask.py
File metadata and controls
142 lines (115 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import pandas as pd
import re
def mask_to_cidr(mask):
"""
Convertit un masque de sous-réseau (ex: 255.255.255.0) en notation CIDR (ex: /24)
"""
try:
# Séparer les octets du masque
octets = mask.split('.')
# Convertir chaque octet en binaire et compter les bits à 1
cidr = 0
for octet in octets:
# Convertir l'octet en binaire (8 bits)
binary = bin(int(octet))[2:].zfill(8)
# Compter les bits à 1
cidr += binary.count('1')
return cidr
except Exception as e:
print(f"Erreur avec le masque {mask}: {e}")
return None
def ip_to_cidr(ip, mask):
"""
Combine une adresse IP et un masque en notation CIDR (ex: 192.168.1.0/24)
"""
cidr = mask_to_cidr(mask)
if cidr is not None:
return f"{ip}/{cidr}"
return None
def process_excel_file(input_file, output_file=None):
"""
Lit un fichier Excel, convertit les masques en notation CIDR et sauvegarde le résultat
"""
# Lire le fichier Excel
df = pd.read_excel(input_file)
# Vérifier que les colonnes nécessaires existent
if 'A' not in df.columns or 'B' not in df.columns:
# Si les colonnes n'ont pas de noms, utiliser la première ligne comme données
if df.shape[1] >= 3:
df.columns = ['A', 'B', 'C'] + list(df.columns[3:])
else:
print("Le fichier doit contenir au moins 2 colonnes (A et B)")
return
# Appliquer la conversion à chaque ligne
df['C'] = df.apply(lambda row: ip_to_cidr(str(row['A']), str(row['B'])), axis=1)
# Sauvegarder le résultat
if output_file is None:
output_file = input_file.replace('.xlsx', '_cidr.xlsx')
df.to_excel(output_file, index=False)
print(f"Fichier sauvegardé sous : {output_file}")
# Afficher un aperçu
print("\nAperçu des résultats :")
print(df[['A', 'B', 'C']].head())
return df
def process_from_clipboard():
"""
Traite les données copiées depuis Excel (depuis le presse-papier)
"""
try:
df = pd.read_clipboard()
# Si moins de 3 colonnes, assumer le format donné
if df.shape[1] >= 2:
# Renommer les colonnes
df.columns = ['A', 'B'] + list(df.columns[2:])[:df.shape[1]-2]
# Ajouter la colonne C
df['C'] = df.apply(lambda row: ip_to_cidr(str(row['A']), str(row['B'])), axis=1)
print("Résultats :")
print(df[['A', 'B', 'C']])
# Copier dans le presse-papier
df.to_clipboard(index=False)
print("\nRésultats copiés dans le presse-papier !")
return df
except Exception as e:
print(f"Erreur lors de la lecture du presse-papier: {e}")
return None
def main():
print("=== Convertisseur de masques en notation CIDR ===")
print("\nOptions :")
print("1. Traiter un fichier Excel")
print("2. Traiter des données du presse-papier")
print("3. Convertir manuellement")
choice = input("\nChoisissez une option (1-3): ")
if choice == '1':
input_file = input("Nom du fichier Excel (ex: test.xlsx): ")
output_file = input("Nom du fichier de sortie (ENTER pour automatique): ")
if not output_file:
output_file = None
process_excel_file(input_file, output_file)
elif choice == '2':
print("\nCopiez vos données Excel (avec colonnes A et B) et appuyez sur ENTER...")
input("Appuyez sur ENTER lorsque les données sont copiées...")
process_from_clipboard()
elif choice == '3':
print("\nConversion manuelle (tapez 'quit' pour sortir)")
while True:
ip = input("\nAdresse IP (ex: 10.58.0.0): ")
if ip.lower() == 'quit':
break
mask = input("Masque (ex: 255.255.0.0): ")
if mask.lower() == 'quit':
break
result = ip_to_cidr(ip, mask)
print(f"Résultat: {result}")
else:
print("Option invalide")
if __name__ == "__main__":
# Exemple d'utilisation directe avec votre fichier
# process_excel_file("test.xlsx")
# Exemple de conversion simple
print("Exemples de conversion :")
print(f"255.255.0.0 -> /{mask_to_cidr('255.255.0.0')}")
print(f"255.255.255.0 -> /{mask_to_cidr('255.255.255.0')}")
print(f"255.255.255.128 -> /{mask_to_cidr('255.255.255.128')}")
print(f"\n10.58.0.0 + 255.255.0.0 -> {ip_to_cidr('10.58.0.0', '255.255.0.0')}")
# Lancer le menu principal
main()