Je travaille depuis peu avec l'AutoIT V3 (dernier build) et avec WinPCAPAI3, un script développé et disponible en open-source ici : http://opensource.grisambre.net/pcapau3/
En me basant sur la documentation et sur les exemples fournis, j'ai put créer mon propre "Wireshark-like" qui affiche les trames en temps réel, permet de les sauvegarder, permet d'avoir des statistiques détaillés pour les communications et même de limiter l'affichage à ma machine uniquement. L'outil développé à pour finalité non pas une supervision, mais de permettre, via l'IHM, de bloquer une adresse IP en ajoutant une règle de blocage de flux en direct dans le Par-feu Windows : chose que je n'ai pour le moment pas encore aborder !

Je suis bloqué au préalable par une autre problématique : Le décodage même des trames reçues par l'outil WinPCAPAI3 (qui se base sur le même driver que WireShark pour la capture de trame). Dans les exemples fournis, deux fonctions majeures, natives à AutoItV3 sont utilisés : StringMid() (qui ressemble fortement à un substr()) et BinaryMid().
Hors je n'arrive pas à trouver les "index" correct pour venir "disséquer" ma trame.
Je me suis basé sur le cours suivant : http://www.gipsa-lab.grenoble-inp.fr/~c ... ices1.html
Ainsi, je pensais que de l'octet 1 à 6 incluts, j'obtiendrait l'adresse MAC de destination : que neni !
Le code suivant me donne l'adresse MAC de destination (disponible dans les exemples) :
Ou $data est équivalent à $paquet[3], lui même équivalent à $packet = _PcapGetPacket($pcap).
Hors, en regardant bien, l'ethertype (qui semble déterminer le protocole dans les exemples) équivaut à ça :
Là ou mon mindf*ck commence, c'est de se dire que l'index 13 de $data juxtapose deux données ? $ethertype va se baser sur l'index 13 de $data pour obtenir un code hexadécimal permettant de déterminer le protocole utilisé (c'est en tout cas ce que je fais via une fonction que j'ai moi même établis). Mais l'index 13 de $macdst est aussi utilisé pour déterminer le dernier couple hexadécimal de l'adresse MAC destinataire (StringMid($data,13,2)).
A partir de là, c'est là que mon esprit est confus. Est-ce que les données impactées par BinaryMid() & StringMid() sont différentes ? Les données sont-elles juxtaposées ? Ou est-ce que le protocole se détermine simplement sur une déduction ?
Ma fonction :
Func GetProtocole($data)
Local $e = BinaryMid($data, 13 , 2)
If $e = "0x0806" Then
return "ARP";
ElseIf $e = "0x0800" Then
Switch BinaryMid ($data, 24 ,1)
Case "0x01"
return "ICMP"
Case "0x02"
return "IGMP"
Case "0x06"
return "TCP"
Case "0x11"
return "UDP"
Case "0x8137" OR "0x8138" OR "0x0022" OR "0x0025" OR "0x002A" OR "0x00E0" OR "0x00FF"
return "IPX"
EndSwitch
Else
return $e
EndIf
EndFunc
Local $e = BinaryMid($data, 13 , 2)
If $e = "0x0806" Then
return "ARP";
ElseIf $e = "0x0800" Then
Switch BinaryMid ($data, 24 ,1)
Case "0x01"
return "ICMP"
Case "0x02"
return "IGMP"
Case "0x06"
return "TCP"
Case "0x11"
return "UDP"
Case "0x8137" OR "0x8138" OR "0x0022" OR "0x0025" OR "0x002A" OR "0x00E0" OR "0x00FF"
return "IPX"
EndSwitch
Else
return $e
EndIf
EndFunc

N'hésitez pas à me dire si je me trompe quelque part : il s'agit de mon premier code en AutoIt.
En vous souhaitant une agréable année, meilleurs vœux !
Liens utiles :
- https://www.autoitscript.fr/autoit3/doc ... ingMid.htm
- https://www.autoitscript.com/autoit3/do ... aryMid.htm