Blue Flower

Rappel
IPv4 codé sur 4 octets
1 octet se code en binaire sur 8 digits (python bin(255) = '0b11111111' )
1 octet se code en hexadecimal sur 2 digits (python hex(255) = '0xff' )

Adresses multicast
IP multicast addresses have been assigned to the IPv4 Class D address space by IANA. The high-order four
bits of a Class D address are 1110. Therefore, host group addresses can be in the range 224.0.0.0 to
239.255.255.255. A multicast address is chosen at the source (sender) for the receivers in a multicast group.

Reserved Link-Local Addresses, 224.0.0.0 to 224.0.0.255 : Reserved for use by network protocols on a local network segment.
Globally Scoped Addresses, 224.0.1.0 to 238.255.255.255 : Reserved to send multicast data between
organizations and across the Internet

For example, Open Shortest Path First (OSPF) uses the IP addresses 224.0.0.5 and 224.0.0.6 to exchange link-state information.
For example, 224.0.1.1 : Network Time Protocol (NTP)

Adresses multicast réservées
224.0.0.1 : tous les hotes du segment capable de recevoir du multicast,
224.0.0.2 : tous les routeurs multicasts,
224.0.0.4 : les routeurs DVMRP,
224.0.0.5 : les routeurs OSPF,
224.0.0.13 : les routeurs PIM ...

IGMP
Les routeurs envoient périodiquement (toutes les 1 ou 2 minutes) un IGMP Host Membership Querie (Type 0x11) sur le group all-hosts (224.0.0.1) avec un TTL de 1

Tous les hostes capablent de traiter le multicast reçoivent cette ``sonde'' et afin qu'ils ne repondent pas tous en même temps, chacun lance un compteur aléatoire pour chaque groupe auprès duquel il est enregistré. Un fois le compteur arrivé a terme, l'hote envoie un IGMP Host Membership Report (TTL 1 Type 0x12) à l'adresse multicast du groupe auquel il participe et pour lequel le compteur viens de se terminer.
Comme le ``Report'' est envoyé au groupe multicast, les autres hotes du segment éventuellement enregistrés sur le même groupe receveront ce report et pourrons ainsi abandonner le compteur et donc de faire eux-même un report auprès du routeur local. Ce dernier continuera de transmettre le flux multicast d'un groupe des l'instant qu'il a au moins une réponse d'un hote concernant le groupe, il n'a pas besoin de savoir combien d'hotes demandent ce flux ni lesquels. Si aucun ``Report'' n'est reçu alors il arrete de transmettre le flux.

IGMP version 2 ajoute un nouveau type de message IGMP Leave Group (Type 0x17) envoyé cette fois ci au groupe all-routers (224.0.0.2) et non au groupe pour lequel il ne desir plus recevoir de flux, ceci afin d'éviter d'encombrer quelques minutes de plus la bande passante par le flux d'un groupe pour lequel il n'y a plus d'hotes interessés. En effet un routeur arrète de transmettre le flux d'un groupe seulement s'il ne reçoit pas de réponse après 3 IGMP Host Membership Querie consécutifs.

Deux versions du protocole PIM :
• PIM en mode dense (“dense mode”)
• PIM en mode clairsemé (“sparce mode”)

Bibliographie :
https://www.telecom-sudparis.eu/s2ia/user/procacci/multicast/multicast-cisco-ext002.html => bien

https://www.ionos.fr/digitalguide/serveur/know-how/multicast/ => pas mal avec une video sur PIM

https://www.metaswitch.com/knowledge-center/reference/what-is-protocol-independent-multicast-pim => pas mal

Dans cet article, nous traiterons des sujets suivants :

  • les notions principales de la virtualisation
  • les modes de connexion au réseau (NAT, par pont, ...)

Dans cet article, nous traiterons des sujets suivants :

  • un test de diffusion multicast IPv6 entre deux machines Debian

Tshark permet de :

  • réaliser des captures réseau en ligne de commande
  • lire un fichier de capture réseau

sudo tshark -D permet de lister les interfaces que l'on peut écouter

sudo tshark affiche à l'écran les paquets capturés sur l'interface numéro 1

sudo tshark -T fields -e frame.number -e ip.src -e ip.dst -e ip.len affiche à l'écran le numéro de trame, l'ip src, l'ip destination et la longueur du paquet IP

Capturer dans un fichier pcap

touch maCapture.pcap
chmod o=rw maCapture.pcap # cette ligne et la ligne qui précède sont nécessaires, sinon, pour une raison inconnu, on aura une erreur "could not be opened: Permission denied" pour créer le fichier maCapture.pcap
sudo tshark -T fields -e frame.number -e ip.src -e ip.dst -w maCapture.pcap # la capture ira dans le fichier maCapture.pcap.

!! Attention, ce fichier ne contiendra pas seulement les colonnes affichées (frame.number, ip.src, ip.dst).

 

Capture sélective

L'option -f (capture filter) permet de sélectionner les données à capturer.

sudo tshark -f "ip or arp" => permet de ne capturer que les paquets de type IP ou ARP 

 

Affichage sélectif

sudo tshark -f "ip or arp" -Y "ip.src == 192.168.1.6"

 

Affichage formatté

tsudo tshark -f "ip or arp" -T fields -E separator=, -E quote=d -e ip.src -e ip.dst

 

"172.217.18.194","192.168.1.6"

"172.217.18.194","192.168.1.6"

"192.168.1.6","172.217.18.194"

"172.217.18.194","192.168.1.6"

 

 

Lire depuis un fichier pcap

Lire un pcap

tshark -r maCapture.pcap # affiche le fichier pcap, uniquement les colonnes principales


1 12:54:58,838325659 2001:861:3a02:dff0:a433:c73d:ae9f:672e → 2a00:1450:4007:812::2003 TLSv1.2 125 2 12:54:58,857405445 2a00:1450:4007:812::2003 → 2001:861:3a02:dff0:a433:c73d:ae9f:672e TCP 86 3 12:54:58,858259678 2a00:1450:4007:812::2003 → 2001:861:3a02:dff0:a433:c73d:ae9f:672e TLSv1.2 126 4 12:54:58,901022717 2001:861:3a02:dff0:a433:c73d:ae9f:672e → 2a00:1450:4007:812::2003 TCP 86 5 12:54:59,169301812 Netgear_cc:e9:e6 → Broadcast HomePlug AV 60

Lire une ligne spécifique du pcap

tshark -r maCapture.pcap -Y frame.number==61 # lit le fichier maCapture.pcap et affiche seulement la frame 61 

 

Filltrer le pcap et mettre le résultat dans un nouveau pcap

Dans l'exemple, on s'intéresse à tous les paquets dont l'IP source est 192.168.1.6

 tshark -r maCapture.pcap -w maCaptureSrcSpecifique.pcap ip.src == 192.168.1.6

 

Analyser un fichier pcap avec Python via Pyshark

 

import pyshark

cap = pyshark.FileCapture('maCapture.pcap')

i=0
for pkt in cap:
    print("==================%d=========================" % i)
    print(pkt)
    i+=1
pkt=cap[58]
print(pkt)
print(f"IP.src:{pkt['ip'].src}, IP.dst:{pkt['ip'].dst}")

....

==================65=========================

Packet (Length: 60)

Layer ETH:

Destination: ff:ff:ff:ff:ff:ff

Address: ff:ff:ff:ff:ff:ff

....

IP.src:54.149.19.17, IP.dst:192.168.1.6

 

 

 

La MIB présente de façon hiérarchique des grandeurs associées à un équipements (date de démarrage, nombre de paquets reçus, ...). Les grandeurs sont référencées via un numéro nommé OID.

Certains fabricants tel CISCO fournissent leur propre MIB.

Le protocole SNMP permet d'accéder à la MIB d'un équipement.

 

Installation

# installs SNMP package:
sudo apt-get install snmp

# downloads common SNMP MIBs:
sudo apt-get install snmp-mibs-downloader

# tells Ubuntu to load SNMP MIB files:
sudo sed -i 's/mibs :/# mibs :/g' /etc/snmp/snmp.conf

Récupération d'un élément  avec snmpget

Exemple avec la version 2 de SNMP.

Ici, on récupère le nom du PC

snmpget -c public -v 2c -On 127.0.0.1 .1.3.6.1.2.1.1.5.0
.1.3.6.1.2.1.1.5.0 = STRING: PC-thierry

Récupération d'un ensemble d'élément avec snmpwalk

Récupération en fournissant l'OID via sa valeur numérique

snmpwalk -v 2c -c public -On localhost .1.3.6.1.2.1.1 (noeud qui contient la feuille représentant le nom du PC)

.1.3.6.1.2.1.1.1.0 = STRING: Linux PC-thierry 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.10
.1.3.6.1.2.1.1.3.0 = Timeticks: (1109970) 3:04:59.70
.1.3.6.1.2.1.1.4.0 = STRING: Me <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.>
.1.3.6.1.2.1.1.5.0 = STRING: PC-thierry
.1.3.6.1.2.1.1.6.0 = STRING: Sitting on the Dock of the Bay
.1.3.6.1.2.1.1.7.0 = INTEGER: 72
.1.3.6.1.2.1.1.8.0 = Timeticks: (80) 0:00:00.80
.1.3.6.1.2.1.1.9.1.2.1 = OID: .1.3.6.1.6.3.11.3.1.1
.1.3.6.1.2.1.1.9.1.2.2 = OID: .1.3.6.1.6.3.15.2.1.1
...

 

Récupération en fournissant l'OID via son nom

snmpwalk -v 2c -c public -On localhost system 
.1.3.6.1.2.1.1.1.0 = STRING: Linux PC-thierry 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.10
.1.3.6.1.2.1.1.3.0 = Timeticks: (3942135) 10:57:01.35
.1.3.6.1.2.1.1.4.0 = STRING: Me <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.>
.1.3.6.1.2.1.1.5.0 = STRING: PC-thierry 
...

Connaître le nom d'un OID

 Exemple pour savoir la signification de l'OID .1.3.6.1.2.1.1.1.0 qui vaut PC-thierry

snmptranslate .1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0

 

 snmptranslate -Of SNMPv2-MIB::sysUpTime.0
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance 

 

snmptranslate -On -Td SNMPv2-MIB::sysUpTime
.1.3.6.1.2.1.1.3
sysUpTime OBJECT-TYPE
  -- FROM SNMPv2-MIB
  SYNTAX TimeTicks
  MAX-ACCESS read-only
  STATUS current
  DESCRIPTION "The time (in hundredths of a second) since the

            network management portion of the system was last
            re-initialized."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 3 } 

Sous-catégories