Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PACKET SNIFFER - SOCKET RAW


Information sur la source

Catégorie :Réseau & Internet Source .NET ( DotNet ) Classé sous : sniffeur, packet, socket, raw, ip Niveau : Initié Date de création : 05/06/2008 Vu / téléchargé: 6 192 / 515

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjour,
Voici le 4éme volet de mes sources sur la programmation des sockets asynchrones en VB.Net
Après :
- SOCKET ASYNCHRONES : SOURCE D'UNE PAGE HTTP D'UN SERVEUR WEB
- SOCKET ASYNCHRONES : SERVEUR WEB
- SERVEUR STREAMING WEBRADIO MP3
Voici donc maintenant un sniffer de réseau.
Avec ce programme vous pourrez surveiller ce qui se passe sur vos interfaces réseaux. Je n’ai pas encore implémenté beaucoup de filtre, uniquement par protocole (ICMP, IGMP, TCP et UDP). La version suivante devrait permettre de filtrer par port et par IP.
Par contre vous pouvez écouter toutes vos interfaces simultanément.

Le mode Raw des sockets permet de descendre jusqu’à la couche 3 .Après quelques recherches sur le NET, il n’est à priori pas possible de descendre au niveau de la couche Ethernet (sauf avec un pseudo driver genre LibPcap).

Utilisation :

1 er onglet : affichage des paquets correspondants aux filtres choisis.
2 eme onglet : toutes les infos au niveau Header IP et Header ICMP, IGMP, TCP ou UDP.
3 eme onglet : Affichage des données (et uniquement des données) du paquet capturé.
4 eme onglet : Mise en place des filtres par protocoles.
 

Conclusion

Et comme d’habitude megafan2001@yahoo.fr

@+
Megafan

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de liquide le 22/06/2008 01:26:41

"mEnteteIP.Flag = Buffer(6) And &HE0 \ 32"
es tu sur ?

signaler à un administrateur
Commentaire de Megafan le 22/06/2008 09:53:54

Salut,

A priori oui, dis moi quel est ton souci ?

rfc791
flag se trouve sur le 7 eme octet donc buffer(6)
flag= 3 bits du haut, donc And &HE0 on ne garde que les 3 bits du haut.
\32 -> decale de 5 bits vers la droite

@+
Megafan

signaler à un administrateur
Commentaire de liquide le 22/06/2008 11:46:16

Salut, c'était juste une question de priorité d'opération entre le AND et le \:
"mEnteteIP.Flag = (Buffer(6) And &HE0) \ 32"

Ceci dit les calculs binaires (conversions) et les bitwises ne sont pas mes amis ce qui fait que je suis un peu perdu dans tous tes calculs.

signaler à un administrateur
Commentaire de Megafan le 23/06/2008 08:52:50

Salut,
Le And est prioritaire donc pas besoin de parenthèses, par contre pour la libilisité j'aurais du en mettre.
Pour les calculs , tout est dans la rfc, après avec des And et des \ on recupére les bits interressants.
@+
Megafan

signaler à un administrateur
Commentaire de liquide le 23/06/2008 12:58:57

Bonjur,
Loin de moi l'idée de vouloir démontrer quoi que ce soit.
Comme lors du debugage de ta class, j'ai eu le souci alors qu'un sniffer bidouillé ne donnait pas le même résultat, j'ai repris des tests simples en debug et sur une recherche j'ai trouvé cela :
http://msdn.microsoft.com/fr-fr/library/cc485067(VS.71).aspx

signaler à un administrateur
Commentaire de Megafan le 23/06/2008 14:04:00

Salut,
3 choses :

1 - La critique positive est constructive. J'admet faire des erreurs (voir j'en fait souvent) donc je tire profis de chaque critique et je m'offisque rarement ;)
2 - le lien : Je ne connaissais pas l'existence de >> et << en VB.NET , donc ça m'evitera à l'avenir d'utiliser \ . Merci.
3 - Priorité : c'est pas clair dans le lien entre la priorité des opérateurs arithmétiques / opérateurs logiques.

par contre un exemple
dim a as byte= &hff and &h80 \ 128 (donc le 1er bit à gauche)
--> a =1
si on met des parenthéses
dim a as byte= &hff and (&h80 \ 128)
--> a=0
Donc le compilateur fait bien le And avant le \
Donc je comprends rien...

de toute façon avec l'opérateur >>,
il faudrait ecrire (&hff and &h80) >> 7 (et la, bien avec des parenthéses)

@+
Megafan




signaler à un administrateur
Commentaire de Megafan le 23/06/2008 14:06:10

Erreur ci dessus : essayes avec &h80 And &h80 \ 128 (et non pas &hff)
@+
Megafan

signaler à un administrateur
Commentaire de liquide le 23/06/2008 16:17:48

je comprend bien.
Mais j'ai beau retourner la situation dans tous les sens, je ne comprend pas d'ou vient mon erreur dans les calculs suivant :

Dim b As Byte = 69
Dim s As Int32 = (b And &HE0) \ 128
Dim C As Int32 = b And &HE0 \ 128

debug me donne :
s = 0
C = 1

signaler à un administrateur
Commentaire de Megafan le 24/06/2008 09:25:29

Salut,
Je ne sais pas ce que j'avais fumé hier, mais quand je refais les memes tests, les resultats sont faux.
Donc bilan :
Le \ est prioritaire par rapport au And
et donc il faut bien mettre des parenthéses et la bonne ligne à ecrire est
Dim s As Int32 = (b And &HE0) \ 128
bien que avec ce que tu m'as appris aussi on pourrais meetre
Dim s as Int32=(b and &he0) >> 7
par contre pourquoi reprendre les bytes en Int32 ?
Merci pour la correction.
@+
Megafan


signaler à un administrateur
Commentaire de liquide le 24/06/2008 10:41:47

Bonjour,
pour int16 : et bien il me fallait un résultat (rapide), c'est facile à taper au clavier, un "object" m'aurait tout aussi bien convenu :) .

signaler à un administrateur
Commentaire de elguevel le 02/09/2008 22:02:30

Salut,

Sérieux tu t'es bien déchiré pour le découpage des paquets, très beau travail (10/10).

Par contre (soyons constructif) :

Dans FrmMain :

Tu utilise tes boucles "For Each" comme çà

        Dim ip As IPAddress

        For Each ip In HostEntry.AddressList
            CmbInterface.Items.Add(ip.ToString)
        Next

Alors que tu peux aussi l'écrire plus rapidement :

       For Each ip As IPAddress In HostEntry.AddressList
            CmbInterface.Items.Add(ip.ToString)
       Next

Tu utilises (comme beaucoup) "MsgBox()" alors qu'il serai préférable d'oublier ses vieux truc VB et y remplacer par : MessageBox.Show(...)

[PS : j'ai même vu dans des bouquins édités par "Microsoft Press" l'utilisation des MsgBox dans du .Net]


Dans ClsInterface, tu utilises des fonctions pour te retourner des valeurs alors que tu pourrais utiliser des propriétés :

Exemple, remplacer :

    Public Function IP_SProtocole(ByVal NoPacket As Integer) As String
        Dim TempPacket As ClsPacket
        TempPacket = Packets(NoPacket)
        Return TempPacket.IP_SProtocole
    End Function

Par :

    Public ReadOnly Property IP_SProtocole(ByVal NoPacket As Integer) As String
        Get
            Return CType(Packets(NoPacket), ClsPacket).IP_SProtocole
        End Get
    End Property

Bon je continue à regarder ton code, qui m'intéresse beaucoup ... si j'ai d'autres remarques je les posteraient.

A+

signaler à un administrateur
Commentaire de elguevel le 02/09/2008 22:03:07 10/10

désolé, oublié la note ...

signaler à un administrateur
Commentaire de elguevel le 02/09/2008 22:11:17

A oui j'aime bien ce truc aussi ...

Au lieu de faire ta concaténation comme cela :

"- IP Destination : " + TabInterfaces(NoInterface).IP_Dest(IdPacket) + " (" + StrHost + ")" + vbCrLf + vbCrLf

Utilise :

String.Format("- IP Destination : {0} ({1}) {2}{2}", TabInterfaces(NoInterface).IP_Dest(IdPacket), StrHost, vbCrLf)

C'est équivalent au "printf()" en C

Du plus si tu as des formats un peu spéciaux comme de l'integer, des dates, etc.. il te caste automatiquement les paramètres en String. Et tu peux modifier la présentations des formats (nb décimal sur entier, format de date, etc...)

signaler à un administrateur
Commentaire de Myke le 17/09/2008 21:22:30

Je ne suis pas expert en pacquet TCP. Mais ta source m'a aidé à comprendre plusieurs choses. J'ai besoin de savoir comment recuperer le protocole. Comme exemple en TCP, savoir que c'est du HTTP. J'ai regarder plusieurs explication sur les trame TCP et je ne crois pas que cette information soit dans le paquet. Je penche pour regarder sur quels ports le paquet est envoyé. Est-ce la bonne solution ?

signaler à un administrateur
Commentaire de Megafan le 23/09/2008 10:43:29

ELGUEVEL > Merci des conseils, je ne suis pas encore un 'puriste' question langage .net (je suis un vb6ien reconvertis)
MYKE > si le port Destination est 80 , il y a de forte chance, mais ce n'est pas obligé, perso j'utilise plusieurs serveur web sur une meme IP publique, donc je redirige mes paquets vers differents ports.
Tu peux aussi verifier le contenu, la présence des balises <html> et </html> est obligatoire dans la norme w3c.

signaler à un administrateur
Commentaire de olivier_1968 le 12/01/2009 16:53:33

Salut Megafan et felicitation pour ton code, il m'a beaucoup aidé.

Par contre il semble qu'il ne fonctionne pas sur Vista, il y a une erreur au niveau de la création du socket :
RawSocket = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)

Il part en erreur :

'une tentaive d'acces à un socket de maniere interdite par ses autorisations d'acces a été tentée'

Est-ce que quelqu'un a résolu ce pb ?

Merci d'avance

Olivier

signaler à un administrateur
Commentaire de Megafan le 19/01/2009 16:55:43

Je pense qu'il faut donner des droits administrateurs à l'application non ?
Je ne suis pas le roi de Vista :)
Tiens moi au courant

signaler à un administrateur
Commentaire de olivier_1968 le 20/01/2009 08:30:17

Tu as raison, c'est une question de droits administrateur, plutot curieux car je suis administrateur de ma machine mais il faut quand même que j'execute l'applciation en temps qu'administrateur !!!!

Les mysteres des UAC vista


A+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

raw socket et protocole TCP/IP [ par robertmouac ] Bonjour tout le monde. Je suis en train de coder une version simplifier du protocol TCP/IP en raw socket. Je formate et deformate bien les trames (ve raw socket et protocole TCP/IP [ par robertmouac ] Je suis en train de coder une version simplifier du protocol TCP/IP en raw socket. Je formate et deformate bien les trames (verif avec ethreal). Le pr packet TCP builder [ par Stormy ] quelqu'un saurait-il m'expliquer (un module peut être) comment confectionner ses propres paquets TCP (TTL, IP source, IP dest, sequence, bourrage, dat Programmation en Raw Socket sous windows, besoin d'aide. [ par Rootard ] J'aimerai programmé en raw socket sous windows, et je voulais savoir si quelqu'un si connait ! Alors si vous vous y connaisait, mailez moi: coolviper@ sockets .Net [ par shadow1779 ] Bonjour,j'ai vu pas mal d'exemple pour me connecter a un socket en VB.NET sauf que je ne sais pas deux choses:1/Comment aller vers une ip et non vers raw socket [ par TRAX44 ] Bonjour, mon problème est simple : je voudrai pouvoir géréer ce type (raw) de socket avec Vb pour pouvoir fair un firewall (intercepeter packet E/S e Socket et Adresse IP [ par vincnet68 ] Bonjour, Je souhaiterai me connecter &#224; un Socket sans devoir passer par un DNS (car cela me fait perdre beaucoup de temps et il faut que les &#23 redirection pour socket [ par darkkinj ] Je viens enfin de me d&#233;cider &#224; me mettre &#224; la programmation sous windows. Je suis en train d'essayer de r&#233;aliser un minichat. le p redirection pour socket [ par darkkinj ] Voila, je me suis mis &#224; la programmation sous windows. Je suis en train de r&#233;aliser un chat tout simple o&#249; chaque client se connecte au socket IP avec 2 cartes réseau [ par Jeff_Trek ] Bonjour, je crée un logiciel qui réceptione des trames IP via socket IP et je dois les renvoyer via socket IP sur une autre machine. Jusque là cela


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,920 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.