Initial commit

This commit is contained in:
Guillaume-Sanchez
2026-05-06 16:45:30 +02:00
parent 57cd2873d5
commit 0aa817abf0
333 changed files with 43173 additions and 2 deletions
@@ -0,0 +1,77 @@
# 25 / 10 / 08
## Adressage ID et sous-réseau
### Exercice 4 :
| Adresse IP| Classe | Réseau | Partie Hote | Masque | Première IP | Dernière IP |
|--------|:--------:|-----|-------------|:-------:|-----|-------------|
| 171.15.200.1 | B | 171.15 | 200.1 | /16 | 172.15.0.1 | 172.15.255.254 |
| 192.20.4.1 | C | 192.20.4 | 1 | /24 | 192.20.4.1 | 192.20.4.254 |
| 8.7.5.18 | A | 8 | 7.5.18 | /8 | 8.0.0.1 | 8.255.255.254 |
| 191.10.8.3 | B | 191.10 | 8.3 | /16 | 191.10.0.1 | 191.10.255.254 |
| 126.200.1.4 | A | 126 | 200.1.4 | /8 | 126.0.0.1 | 126.255.255.254
| 223.1.2.3 | C | 223.1.2 | 3 | /24 | 223.1.2.1 | 223.1.2.254 |
### Exercice 5 :
| Adresse IP | Classe | Masque |
|--------|----------|-----|
| | | |
| | | |
| | | |
| | | |
| | | |
### Exercice 6 :
| Adresse IP | Validité | Explication |
|--------|:--------:|-----|
| 192.118.275.3 | N | 275 |
| 192.168.0.1 | O | |
| 172.17.255.0 | O | |
| 191.100.2.255 | O | |
| 127.0.0.1 | N | ip local réservé |
| 169.254.100.9 | O | |
| 0.0.0.7 | N | réseau 0 |
| 0.0.0.0 | N | réseau 0 |
| 10.255.255.255 | N | Adresse Broadcast Dirigé |
| 190.100.0.0 | N | Adresse réseau |
| 255.255.255.255 | N | Adresse Broadcast Local |
| 224.0.0.1 | N | |
### Exercice privée / publique :
| | | | | |
|--------|--------|-----|-------|-------|
| PU | PU | PR | PR | PU |
| PR | PR | PR | PR | PU |
### Exercice Mask 1
| Mask decimal | Mask CIDR |
|------|------|
||/8|
||/24|
||/16|
||/12|
||/19|
||/29|
||/14|
### Exercice Mask 2
| Mask CIDR | Mask decimal |
|-----|-----|
|| 255.128.0.0 |
|| 255.248 |
|| 255.255.255.252 |
|| 255.255.128.0 |
|| 255.255.248.0 |
|| 255.255.254.0 |
|| 255.192.0.0 |
### Exercice Mask 3
| Adresse | Mask decimal | Réseau | |
|-----|-----|-----|-----|
@@ -0,0 +1,5 @@
# 25 / 11 / 12
## TP : rappels-2024
@@ -0,0 +1,16 @@
# 26 01 29
## Triade de la sécurité :
```
Confidentialité
/\
/ \
/ \
/ \
/________\
Intégrité Disponibilité
```
8 milliard de personnes sur terre mais plus assé d'ip diponible. A plus de 60% possèdent et utilise internet.
accuracy = nomber of true positive
@@ -0,0 +1,60 @@
# Rappel 2024
## Exercice 3
Il s'agit d'une requête HTTP GET (navigation web) envoyée par l'hôte 172.16.0.100 vers le serveur web 172.16.0.2
Ethernet :
------
00 50 FC 20 3A 4A : Adresse Mac Desination
00 50 FC 0B 9A 80 : Adresse Mac Source
08 00 : Type de la Trame
IP :
------
4 : Le datagrame contenu correspond à la version 4 d'IP
5 : 5 * 4 = 20 octets, l'entête IP fait 20 octets de longuer
00 : Vide
01 3E : Longueur de la trame IP ()
8E 4F : Identification
40 00 : Fragment offset 0 donc pas de fragment
80 : Time to live (128)
06 : Numéro du protocole, 06 correspond au protocole TCP
12 E4 : ?
AC 10 00 64 : IP Source 172.16.0.100
AC 10 00 02 : IP Destination 172.16.0.2
TCP :
------
19 32 : Port Source 6450
00 50 : Port Destination 80 (http)
2C 3D 86 A1 : Numéro de séquence absolu
92 D3 19 AD : Acknowledgement number
50 :
18 : Flags
FA F0 :
1F 2F :
00 00 :
Binary file not shown.
@@ -0,0 +1,15 @@
000000 00 50 FC 20 3A 4A 00 50 FC 0B 9A 80 08 00 45 00
000010 01 3E 8E 4F 40 00 80 06 12 E4 AC 10 00 64 AC 10
000020 00 02 19 32 00 50 2C 3D 86 A1 92 D3 19 AD 50 18
000030 FA F0 1F 2F 00 00 47 45 54 20 2F 20 48 54 54 50
000040 2F 31 2E 31 0D 0A 41 63 63 65 70 74 3A 20 2A 2F
000050 2A 0D 0A 41 63 63 65 70 74 2D 4C 61 6E 67 75 61
000060 67 65 3A 20 66 72 0D 0A 41 63 63 65 70 74 2D 45
000070 6E 63 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 20 64
000080 65 66 6C 61 74 65 0D 0A 49 66 2D 4D 6F 64 69 66
000090 69 65 64 2D 53 69 6E 63 65 3A 20 54 75 65 2C 20
000100 30 39 20 41 70 72 20 32 30 30 32 20 31 38 3A 35
000110 36 3A 35 38 20 47 4D 54 0D 0A 49 66 2D 4E 6F 6E
000120 65 2D 4D 61 74 63 68 3A 20 22 37 66 36 32 36 2D
000130 62 34 61 2D 33 63 62 33 33 39 37 61 22 0D 0A 55
000140 73 65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C
Binary file not shown.
@@ -0,0 +1,20 @@
UE2.21 Technologies des réseaux
## Plan du module
Séance du Mercredi 12 novembre 2025 de 13h30 à 17h00 par M. KOURITAL Mohamed
- Énoncé :
- [Analyse du protocole HTTP](https://wiki.simoko.eu/cours/systemeetreseau/analyseprotocolehttp)
- [Outils de capture de paquets et Analyse de trames (Ethernet, ARP, ICMP, DHCP), Tables ARP, attribution dynamique dadresses IP](https://wiki.simoko.eu/cours/systemeetreseau/outils_de_capture_de_paquets_et_analyse_de_trames2)
- [Analyse des protocoles TCP et IP avec Wireshark](https://wiki.simoko.eu/cours/systemeetreseau/analyse_des_protocoles_tcp_et_ip_avec_wireshark)
- [Interrogations dune infrastructure de réseaux Internet](https://wiki.simoko.eu/cours/systemeetreseau/interrogations_d_une_infrastructure_de_reseaux_internet)
- [Devoir de synthèse](https://wiki.simoko.eu/cours/systemeetreseau/devoir_de_synthese)
## Ressources pédagogiques
- [Adressage_IP_et_sous-reseaux-presentation-2013.pdf](https://formations.cci-paris-idf.fr/CFAUTEC/index.php/document/telecharger/1eLMjYG662Vwbf-hxcGSfPQE7RVTOg4DY1UnuxAwg-bWP9KvX8UAAOX-CcJyz-XGR260qJID/)
- [1 - TD Adressage IP et sous-reseaux.pdf](https://formations.cci-paris-idf.fr/CFAUTEC/index.php/document/telecharger/nezoO2c3xrjQ1X87U2uzXZ1abV2zgcZtxvYRxjFymQReTwGcFcgw8bjsV-1QeQxXdW16EVrm/)
- [rappels-2024.pdf](https://formations.cci-paris-idf.fr/CFAUTEC/index.php/document/telecharger/eCVxPWRnu-GwDSco9LynAW2IP-q6AmLgxbmuArpXZZDamIAbTcG0ibXi0hTc4GylyAouSWvh/)
- [exo58.pkt](https://formations.cci-paris-idf.fr/CFAUTEC/index.php/document/telecharger/oPZECyL98qcx6e6xKE_c4g1qp09mqnWxN28Coo4SLzfCu4kExFpJcCw4VmjkLiDSrX_B5EZs/)
- [normalisation_protocoles.pdf ](https://formations.cci-paris-idf.fr/CFAUTEC/index.php/document/telecharger/mBmn3jJDnB0iYGcu2eeIno5O97MkuyRPvIqPc3JyLrjKLf_nQJwKpHmYfk0MX820PtPcXVxU/)
+191
View File
@@ -0,0 +1,191 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ipv4_calc.py
Calculatrice IPv4 (fonctions clés du site site24x7 ipv4 subnet calculator)
Usage:
python ipv4_calc.py 192.168.1.10/24
python ipv4_calc.py 10.0.5.7 255.255.255.0
python ipv4_calc.py --split 192.168.0.0/22 --subnet-size 24 # découper /22 en /24
python ipv4_calc.py --by-hosts 192.168.0.0/24 --hosts 50 # trouver préfixe nécessaire
"""
from __future__ import annotations
import ipaddress
import argparse
import math
from typing import Tuple, List
def ip_to_bin_str(ip: ipaddress.IPv4Address) -> str:
return '.'.join(f'{octet:08b}' for octet in ip.packed)
def mask_to_wildcard(mask: ipaddress.IPv4Address) -> ipaddress.IPv4Address:
# wildcard = inverse of mask
mask_int = int(mask)
wildcard_int = (~mask_int) & 0xFFFFFFFF
return ipaddress.IPv4Address(wildcard_int)
def usable_host_count(prefixlen: int) -> int:
if prefixlen == 32:
return 1 # only the host itself
if prefixlen == 31:
return 2 # RFC 3021: two-host point-to-point networks (no broadcast)
return max(0, (1 << (32 - prefixlen)) - 2)
def summarize_network(network: ipaddress.IPv4Network) -> dict:
net_addr = network.network_address
broadcast = network.broadcast_address
prefixlen = network.prefixlen
netmask = network.netmask
wildcard = mask_to_wildcard(netmask)
total_hosts = (1 << (32 - prefixlen))
usable = usable_host_count(prefixlen)
# first/last usable host (handle /31 and /32 specially)
if prefixlen == 32:
first_usable = last_usable = net_addr
elif prefixlen == 31:
# two addresses, both usable (RFC 3021)
first_usable = net_addr
last_usable = network.network_address + 1
else:
first_usable = net_addr + 1
last_usable = broadcast - 1
return {
'network': str(net_addr),
'cidr': f'{net_addr}/{prefixlen}',
'netmask': str(netmask),
'netmask_binary': ip_to_bin_str(netmask),
'wildcard': str(wildcard),
'wildcard_binary': ip_to_bin_str(wildcard),
'broadcast': str(broadcast),
'first_usable': str(first_usable),
'last_usable': str(last_usable),
'total_hosts': total_hosts,
'usable_hosts': usable,
'prefixlen': prefixlen,
'network_binary': ip_to_bin_str(net_addr),
}
def parse_input(ip_str: str, mask_str: str = None) -> ipaddress.IPv4Network:
"""
Accept:
- "192.168.1.10/24"
- "192.168.1.10 255.255.255.0"
- "192.168.1.0/24"
Returns an IPv4Network object (network derived from given IP and mask).
"""
if '/' in ip_str:
# ip/prefix form
iface = ipaddress.IPv4Interface(ip_str)
return iface.network
else:
# ip + mask form or ip alone -> require mask_str
if mask_str is None:
raise ValueError("Masque non fourni. Utiliser format 'IP/PREFIX' ou fournir le masque.")
# If mask_str is like /24, remove slash
if mask_str.startswith('/'):
mask_str = mask_str[1:]
# If mask_str is decimal prefix
if mask_str.isdigit():
prefix = int(mask_str)
iface = ipaddress.IPv4Interface(f"{ip_str}/{prefix}")
return iface.network
# Otherwise assume dotted mask
try:
# compute prefix from mask
mask_ip = ipaddress.IPv4Address(mask_str)
# translate to prefixlen:
mask_int = int(mask_ip)
prefix = mask_int.bit_count() # number of ones
iface = ipaddress.IPv4Interface(f"{ip_str}/{prefix}")
return iface.network
except Exception as e:
raise ValueError(f"Masque invalide: {mask_str}") from e
def split_network_into_prefix(network: ipaddress.IPv4Network, new_prefix: int) -> List[ipaddress.IPv4Network]:
if new_prefix < network.prefixlen:
raise ValueError("new_prefix doit être >= prefix du réseau d'origine")
return list(network.subnets(new_prefix=new_prefix))
def required_prefix_for_hosts(hosts: int) -> int:
"""
Retourne le préfixe minimal capable de contenir 'hosts' hôtes utilisables.
Pour hosts <= 2, /31 ou /32 peuvent être envisagés.
"""
if hosts <= 0:
raise ValueError("Le nombre d'hôtes doit être positif.")
# handle /32 -> 1, /31 -> 2, others -> usable = 2^(32-p)-2
if hosts == 1:
return 32
if hosts == 2:
return 31
# find minimal p such that (2^(32-p) - 2) >= hosts
# => 2^(32-p) >= hosts + 2
needed = hosts + 2
power = math.ceil(math.log2(needed))
prefix = 32 - power
if prefix < 0:
raise ValueError("Trop d'hôtes demandés pour IPv4")
return prefix
def pretty_print_summary(s: dict):
print(f"Réseau : {s['cidr']} ({s['network']})")
print(f"Masque : {s['netmask']} (/{s['prefixlen']})")
print(f"Masque (binaire): {s['netmask_binary']}")
print(f"Wildcard: {s['wildcard']} (binaire: {s['wildcard_binary']})")
print(f"Adresse de broadcast : {s['broadcast']}")
print(f"Plage hôtes utilisables : {s['first_usable']} - {s['last_usable']}")
print(f"Total adresses : {s['total_hosts']} | Hôtes utilisables : {s['usable_hosts']}")
print(f"Adresse réseau (binaire) : {s['network_binary']}")
print()
def main():
parser = argparse.ArgumentParser(description="Calculatrice IPv4 (subnet calculator)")
parser.add_argument('ip', help="IP ou réseau. Ex: 192.168.1.10/24 ou 10.0.0.1")
parser.add_argument('mask', nargs='?', default=None, help="Masque (optionnel si 'ip' contient /). Ex: 255.255.255.0 ou /24")
parser.add_argument('--split', action='store_true', help="Afficher la liste des sous-réseaux")
parser.add_argument('--subnet-size', type=int, default=None, help="Si --split: nouveau préfixe (ex: 24)")
parser.add_argument('--by-hosts', action='store_true', help="Calculer le préfixe nécessaire pour un nombre d'hôtes (utiliser --hosts)")
parser.add_argument('--hosts', type=int, default=None, help="Nombre d'hôtes (utile avec --by-hosts)")
args = parser.parse_args()
# by-hosts mode
if args.by_hosts:
if args.hosts is None:
parser.error("--by-hosts nécessite --hosts N")
prefix = required_prefix_for_hosts(args.hosts)
print(f"Pour {args.hosts} hôtes utilisables, préfixe minimal: /{prefix}")
print(f"Taille réseau: {1 << (32 - prefix)} adresses totales, {usable_host_count(prefix)} hôtes utilisables")
return
try:
network = parse_input(args.ip, args.mask)
except Exception as e:
parser.error(str(e))
summary = summarize_network(network)
pretty_print_summary(summary)
if args.split:
if args.subnet_size is None:
parser.error("--split nécessite --subnet-size")
new_pref = args.subnet_size
subnets = split_network_into_prefix(network, new_pref)
print(f"Découpage de {network.with_prefixlen} en /{new_pref} : {len(subnets)} sous-réseaux")
for s in subnets:
summ = summarize_network(s)
print(f" - {s.with_prefixlen}: {summ['first_usable']} - {summ['last_usable']} (utilisables: {summ['usable_hosts']})")
if __name__ == "__main__":
main()