begin process at 2012 02 10 00:47:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > PACKET SNIFFER - SOCKET RAW

PACKET SNIFFER - SOCKET RAW


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :10 559 / 1 036

Auteur : Megafan

Ecrire un message privé
Site perso
Commentaire sur cette source (25)
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture QUADRILLAGES ET SYMETRIES
Source avec Zip Source avec une capture Source .NET (Dotnet) SERVEUR STREAMING WEBRADIO MP3
Source avec Zip Source avec une capture Source .NET (Dotnet) SOCKET ASYNCHRONES : SERVEUR WEB
Source avec Zip Source avec une capture Source .NET (Dotnet) SOCKET ASYNCHRONES : SOURCE D'UNE PAGE HTTP D'UN SERVEUR WEB
Source avec Zip Source avec une capture TIMER ASYNCHRONE

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture Source .NET (Dotnet) PILOTER UN WALLBOARD IP ALCATEL par mays
Source avec Zip Source .NET (Dotnet) OVERSOCK - CLASS SOCKET ASYNCHRONE MULTI-CLIENT AVEC INTER-T... par iLgend
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET 2 ] CLIENT-SERVEUR UDP DE BASE EN MODE CONSOLE par psycho81
Source avec Zip Source avec une capture Source .NET (Dotnet) MASTERLOCATER.NET par MasterHack

Commentaires et avis

Commentaire de liquide le 22/06/2008 01:26:41

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

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

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.

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

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

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




Commentaire de Megafan le 23/06/2008 14:06:10

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

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

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


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 :) .

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+

Commentaire de elguevel le 02/09/2008 22:03:07 10/10

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

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...)

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 ?

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.

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

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

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+

Commentaire de ezio2000 le 08/08/2009 00:03:03

on Vista the program reads ONLY incoming packets, and NOT outgoing packets... why???

Commentaire de ezio2000 le 08/08/2009 11:50:12

désolé, je traduis en français: Vista lire uniquement la sniffer les paquets entrants et sortants non. Pourquoi? comment lire les paquets sortants?

excusées, je traduis en français : avec Vista la sniffer loi seulement les paquets en entrée et pas ceux en sortie. Pourquoi? comment lire même les paquets en sortie ?

Commentaire de informatixa le 12/11/2009 22:24:13

Bonjour, voila mon souci le sniffer lit que les packet entrants mais pas les packet sortant pourquoi ?

Commentaire de Mayzz le 18/06/2010 20:04:35 10/10

Apréciable la facilité avec laquelle tu procède à l'analyse des entêtes.

Très bonne source, très instructive, bien codé et très facile à comprendre qui se font rare ici.

Pour moi c'est un 10 sans discuter.

Bravo !

Commentaire de Mayzz le 23/06/2010 15:09:53

Juste une chose :

Dim FragmentOffset As Byte ' 13 et que font le 2 bits manquants ????

En fait ce sont plutôt les 3 bits  manquants (mots de 16 bits de l'entête).

Et pour répondre : Les 3 derniers bits sont pour le flag ;O)

Mais je suppose que tu le sais déjà et que tu as simplement oublié de retirer ce com, mais je le poste quand même pour répondre à ceux qui se poseraient la question en te relisant.

Commentaire de toonsmil le 11/02/2011 19:01:20

Bonjour , cherchant a fair un sniffer raw socket pour capturer des paquets tcp en vb.net (et aussi pour envoyer des packets mais ca je verrais plus tard) je trouve cette source.Je me connecte a un serveur avec un client installé sur mon PC sous windows seven, je lance la source , je filtre avec la source le port qui m'interesse mais je rencontre un probleme : je recoit les paquets dans les 2 sens (client -> serveur , serveur -> client) mais je recois seulement les datas des paquets dans le sens client -> serveur et pas dans l'autre sens , savez vous d'ou cela peu venir ?

Commentaire de Mayzz le 11/02/2011 20:05:48

Ben à mon avis ils ont du amélioré la sécurité sous Win7, essaye d'étudier la source pour comprendre le pourquoi du comment.

Pour ton envoi de paquets, tu verras vite que via les sockets c'est malheureusement impossible (en Raw). La solution est d'utiliser les API d'une DLL nommé winpcap. Il existe des wrapper en C# donc à traduire en VB.

Pour plus d'infos regarde ce post, cela te donnera une idée de la difficulté que j'ai rencontrée. D'ailleurs je n'ai jamais pu concrétiser mon projet. Il est tombé à l'eau car techniquement il est apparemment impossible d'envoyer des paquets sur le réseau (je parle de paquets brut)

Voila le lien :

http://www.codes-sources.com/forum/sujet-BAR-RESEAU-PARTAGE-ROUTAGE_1448100.aspx

En te souhaitant  bon courage, tiens moi au jus si tu y arrive je serais fortement intéressé par une solution.

 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales