Bonjour!

Je cherche à lire les trames que renvoit ma camera IP vers le serveur local. J'ai essayé de le faire avec WireShark mais je n'obtiens que des trames illisibles ou des trames de check.

Voici une des trames illisibles qui arrivent en permanence, je suppose que ca doit être un mix de signal Video et de déplacement quand il y en a:

Nom : wireSharkContinuation.png
Affichages : 300
Taille : 202,6 Ko

Voici une des trames de check après déplacement:

Nom : wireSharkOk.png
Affichages : 289
Taille : 135,4 Ko

Cela m'a poussé à créer mon propre WireShark. Or je ne trouve pas ces trames sur "mon propre WireShark". J'obtens soit des trames illisibles soit des trames vides.

Voici une des trames vide. Même si j'ai force à remplacer tous les "." par leurs caractères, je ne suis pas sûr q

Nom : snifferContinuation.png
Affichages : 251
Taille : 97,1 Ko




Même si je ne suis pas sûr d'avoir pris exactement les memes trames, je n'arrive pas à avoir les trames de check par exemple.
Pouvez vous m'aider à faire en sorte que "mon WireShark" fasse au moins le meme boulot que le vrai Wireshark? Voire meme me permette de comprendre les trames de "Continuation"? A moins que je ne dois utiliser OpenCV ou un autre logiciel pour copmprendre ces drames illisibles?

Voici le code de mon analyseur de données:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
Imports System.Net

Public Class FrmMain

    Private TabInterfaces() As ClsInterface ' Gérer autant de ClsInterface que d'interfaces physiques sur le PC
    Private Interfaces As New Hashtable     ' Pour retoruver facilement l'index de TabInterfaces à partir de l'IP
    Const ToutesLesInterfaces As String = "(Toutes...)" ' si on veux capturer les paquets de toutes les interfaces
    Const LaCamera As String = "La caméra"
    Private watchVideo As Boolean = False

    Private Sub PacketRecu(ByVal StrInterface As String)
        ' Evenement d'arrivée d'un paquet depuis l'interface spécifée
        LblNbPacket.Text = Val(LblNbPacket.Text) + 1
        ' Mettre à jour la DataGridView
        UpdateGrid(StrInterface)

    End Sub

    Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStart.Click

        If BtnStart.Text = "Ecoute de la caméra 192.168.1.44" Then
            ' Click sur démarrer l'écoute.
            GridPackets.Rows.Clear()

            BtnStart.Text = "Arrêter l'écoute"

            If CmbInterface.SelectedItem = ToutesLesInterfaces Then
                ' On ecoute toutes les interfaces
                ReDim TabInterfaces(CmbInterface.Items.Count - 2) ' Sans (Toutes...) evidement
                For i As Integer = 0 To CmbInterface.Items.Count - 2
                    TabInterfaces(i) = New ClsInterface
                    TabInterfaces(i).StartCaptureOn(CmbInterface.Items(i))
                    AddHandler TabInterfaces(i).NouveauPacket, AddressOf PacketRecu
                    Interfaces.Add(CmbInterface.Items(i), i)
                Next

            Else
                ' On écoute 1 interface
                ReDim TabInterfaces(0)
                TabInterfaces(0) = New ClsInterface
                TabInterfaces(0).StartCaptureOn(CmbInterface.SelectedItem)
                AddHandler TabInterfaces(0).NouveauPacket, AddressOf PacketRecu
                Interfaces.Add(CmbInterface.SelectedItem, 0)
            End If

            LblNbPacket.Text = "0"
        Else
            ' Click sur arrêter l'écoute
            For i As Integer = 0 To TabInterfaces.Length - 1
                TabInterfaces(i).StopCapture()
            Next
            Interfaces.Clear()

            BtnStart.Text = "Ecoute de la caméra 192.168.1.44"
        End If

    End Sub

    Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim HostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName)
        Dim ip As IPAddress

        ' Déterminer toutes les interfaces de l'ordinateurs
        For Each ip In HostEntry.AddressList
            CmbInterface.Items.Add(ip.ToString)
        Next

        If HostEntry.AddressList.Length > 0 Then
            'ReDim TabInterfaces(HostEntry.AddressList.Length)
            CmbInterface.SelectedIndex = 0
            If HostEntry.AddressList.Length > 1 Then
                CmbInterface.Items.Add(ToutesLesInterfaces)
            End If
        Else
            BtnStart.Enabled = False
            RadBtnPause.Enabled = False
        End If

    End Sub

    Private Sub UpdateGrid(ByVal StrInterface As String)

        Dim IndexInterface As Integer = Interfaces(StrInterface)
        Dim DernierPacket As Integer = TabInterfaces(IndexInterface).PacketCount - 1

        Try
            With TabInterfaces(IndexInterface)
                ' Filtrage des protocoles
                Select Case .IP_SProtocole(DernierPacket)
                    Case "ICMP" : If ChkIGMP.Checked = False Then Exit Sub
                    Case "IGMP" : If ChkICMP.Checked = False Then Exit Sub
                    Case "TCP" : If ChkTCP.Checked = False Then Exit Sub
                    Case "UDP" : If ChkUDP.Checked = False Then Exit Sub

                End Select


                If .IP_Source(DernierPacket) = "192.168.1.44" Then
                    GrilleAjoute(Now.ToString, StrInterface, DernierPacket + 1,
                    .IP_SProtocole(DernierPacket),
                    .IP_Source(DernierPacket),
                    .GetPortSource(DernierPacket),
                    .IP_Dest(DernierPacket),
                    .GetPortDest(DernierPacket))
                End If



                'End If
            End With


        Catch e As Exception

        End Try


    End Sub

    Private Delegate Sub DelegateGrilleAjoute(ByVal DateHeure As String, ByVal StrIP As String, ByVal NoPacket As Integer, ByVal StrProtocole As String, ByVal StrIPSource As String, ByVal StrPortSource As String, ByVal StrIPDest As String, ByVal StrPortDest As String)
    Private Sub RealGrilleAjoute(ByVal DateHeure As String, ByVal StrIP As String, ByVal NoPacket As Integer, ByVal StrProtocole As String, ByVal StrIPSource As String, ByVal StrPortSource As String, ByVal StrIPDest As String, ByVal StrPortDest As String)
        GridPackets.Rows.Add(DateHeure, StrIP, NoPacket.ToString, StrProtocole, StrIPSource, StrPortSource, StrIPDest, StrPortDest)
        If RadBtnPause.Checked = False Then
            GridPackets.FirstDisplayedScrollingRowIndex = GridPackets.RowCount - 1
        End If
    End Sub
    Private Sub GrilleAjoute(ByVal DateHeure As String, ByVal StrIP As String, ByVal NoPacket As Integer, ByVal StrProtocole As String, ByVal StrIPSource As String, ByVal StrPortSource As String, ByVal StrIPDest As String, ByVal StrPortDest As String)
        Me.Invoke(New DelegateGrilleAjoute(AddressOf RealGrilleAjoute), DateHeure, StrIP, NoPacket, StrProtocole, StrIPSource, StrPortSource, StrIPDest, StrPortDest)
    End Sub

    Private Sub ChkTopMost_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkTopMost.CheckedChanged

        If ChkTopMost.Checked Then
            Me.TopMost = True
        Else
            Me.TopMost = False
        End If
    End Sub

    Private Sub RadBtnPause_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadBtnPause.Click
        ' Le controle ne gére pas checked et unchecked tout seul bizarre : A revoir.
        RadBtnPause.Checked = Not RadBtnPause.Checked

    End Sub

    Private Sub TabDatas_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabDatas.Enter

        If GridPackets.RowCount = 0 Then Exit Sub

        ' Effacer les 2 listes
        LstAff.Items.Clear()

        ' Récupérer l'interface et le n° de paquet selectionné dans la DataGridView
        Dim NoInterface As Integer = Interfaces(GridPackets.CurrentRow.Cells(1).Value)
        Dim NoPacket As Integer = GridPackets.CurrentRow.Cells(2).Value
        ' Récuperer le paquet (idex de paquet = NoPacket-1)
        Dim Datas() As Byte = TabInterfaces(NoInterface).GetDatas(NoPacket - 1)
        If Datas.Length = 0 Then
            LstAff.Items.Add("Pas de données pour ce paquet.")
            Exit Sub
        End If

        Dim StrHex As String = ""
        Dim StrAscii As String = ""

        For i As Integer = 0 To Datas.Length - 1
            StrHex += MyHex(Datas(i), 2) + " "
            If Datas(i) >= 32 Then
                StrAscii += Chr(Datas(i))
            Else
                StrAscii += "."
            End If

            If StrAscii.Length = 16 Then
                LstAff.Items.Add(StrHex + New String(" ", 4) + StrAscii)
                StrAscii = ""
                StrHex = ""
            End If
        Next

        If StrAscii <> "" Then LstAff.Items.Add(StrHex + New String(" ", 4 + (16 - StrAscii.Length) * 3) + StrAscii)

    End Sub

    Private Function MyHex(ByVal NbDec As Long, ByVal Lg As Integer) As String

        Dim Hx As String = New String("0", Lg) + Hex(NbDec)
        Hx = Hx.Substring(Hx.Length - Lg, Lg)
        Return Hx

    End Function

    Private Sub TabDetails_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabDetails.Enter

        If GridPackets.RowCount = 0 Then Exit Sub

        TxtDetails.Clear()

        ' Récupérer l'interface et le n° de paquet selectionné dans la DataGridView
        Dim NoInterface As Integer = Interfaces(GridPackets.CurrentRow.Cells(1).Value)
        Dim NoPacket As Integer = GridPackets.CurrentRow.Cells(2).Value
        Dim IdPacket = NoPacket - 1

        ' Récuperer les infos IP
        TxtDetails.AppendText("Paquet N° : " + NoPacket.ToString + " sur l'interface : " + GridPackets.CurrentRow.Cells(1).Value.ToString + vbCrLf)
        TxtDetails.AppendText("## Détail de l'entête IP ##" + vbCrLf)
        TxtDetails.AppendText("- Version : " + TabInterfaces(NoInterface).IP_Version(IdPacket) + vbCrLf)
        Dim IHL As Byte = TabInterfaces(NoInterface).IP_IHL(IdPacket)
        TxtDetails.AppendText("- IHL : " + IHL.ToString + " (" + (IHL * 4).ToString + " Octets)" + vbCrLf)
        Dim Serv() As String = TabInterfaces(NoInterface).IP_Service(IdPacket)
        TxtDetails.AppendText("- Type de Service :" + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Priorité : " + Serv(0) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Délai : " + Serv(1) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Débit : " + Serv(2) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Fiabilité : " + Serv(3) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Coût : " + Serv(4) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- MBZ : " + Serv(5) + vbCrLf)
        Dim LT As Integer = TabInterfaces(NoInterface).IP_LongueurTotale(IdPacket)
        TxtDetails.AppendText("- Longueur totale : " + LT.ToString + " Octets (0x" + MyHex(LT, 4) + ")" + vbCrLf)
        Dim ID As Integer = TabInterfaces(NoInterface).IP_ID(IdPacket)
        TxtDetails.AppendText("- Identification : 0x" + MyHex(ID, 4) + " (" + ID.ToString + ")" + vbCrLf)
        Dim Flag() As String = TabInterfaces(NoInterface).IP_Flag(IdPacket)
        TxtDetails.AppendText("- Flags :" + vbCrLf)
        TxtDetails.AppendText(vbTab + "- Reserved :" + Flag(0) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- DontFragment :" + Flag(1) + vbCrLf)
        TxtDetails.AppendText(vbTab + "- MoreFragment :" + Flag(2) + vbCrLf)
        TxtDetails.AppendText("- Postion de Fragment : " + TabInterfaces(NoInterface).IP_FragmentOffset(IdPacket).ToString + vbCrLf)
        TxtDetails.AppendText("- TTL : " + TabInterfaces(NoInterface).IP_TTL(IdPacket).ToString + vbCrLf)
        Dim Protocole As Integer = TabInterfaces(NoInterface).IP_Protocole(IdPacket)
        Dim SProtocole As String
        Select Case Protocole
            Case 1 : SProtocole = "ICMP"
            Case 2 : SProtocole = "IGMP"
            Case 6 : SProtocole = "TCP"
            Case 17 : SProtocole = "UDP"
            Case Else : SProtocole = "Inconnu"

        End Select
        TxtDetails.AppendText("- Protocole : " + SProtocole + " (" + Protocole.ToString + ")" + vbCrLf)
        Dim chk As Integer = TabInterfaces(NoInterface).IP_Checksum(IdPacket)
        TxtDetails.AppendText("- Checksum : " + chk.ToString + " (0x" + MyHex(chk, 4) + ")" + vbCrLf)
        Dim StrHost As String = NsLookup(TabInterfaces(NoInterface).IP_Source(IdPacket))
        TxtDetails.AppendText("- IP Source : " + TabInterfaces(NoInterface).IP_Source(IdPacket) + " (" + StrHost + ")" + vbCrLf)
        StrHost = NsLookup(TabInterfaces(NoInterface).IP_Dest(IdPacket))
        TxtDetails.AppendText("- IP Destination : " + TabInterfaces(NoInterface).IP_Dest(IdPacket) + " (" + StrHost + ")" + vbCrLf + vbCrLf)
        ' ----Champ Options

        If Protocole = 6 Then
            ' Recupérer les infos TCP
            TxtDetails.AppendText("## Détail de l'entête TCP ##" + vbCrLf)
            TxtDetails.AppendText("- Port Source : " + TabInterfaces(NoInterface).GetPortSource(IdPacket) + vbCrLf)
            TxtDetails.AppendText("- Port Destination : " + TabInterfaces(NoInterface).GetPortDest(IdPacket) + vbCrLf)
            Dim NumSeq As Long = TabInterfaces(NoInterface).TCP_NumSeq(IdPacket)
            TxtDetails.AppendText("- Numéro de séquence : " + NumSeq.ToString + "  (0x" + MyHex(NumSeq, 8) + ")" + vbCrLf)
            Dim NumACK As Long = TabInterfaces(NoInterface).TCP_NumACK(IdPacket)
            TxtDetails.AppendText("- Numéro d'accusé de récéption : " + NumACK.ToString + "  (0x" + MyHex(NumACK, 8) + ")" + vbCrLf)
            Dim Offset As Integer = TabInterfaces(NoInterface).TCP_Offset(IdPacket)
            TxtDetails.AppendText("- Offset Datas : " + Offset.ToString + " mots de 32 bits, soit " + (Offset * 4).ToString + " Octets  (0x" + MyHex(Offset * 4, 4) + ")" + vbCrLf)
            Dim TCPFlag() As String = TabInterfaces(NoInterface).TCP_Flag(IdPacket)
            TxtDetails.AppendText("- Flags :" + vbCrLf)
            TxtDetails.AppendText(vbTab + "- URG : " + TCPFlag(0) + vbCrLf)
            TxtDetails.AppendText(vbTab + "- ACK : " + TCPFlag(1) + vbCrLf)
            TxtDetails.AppendText(vbTab + "- PSH : " + TCPFlag(2) + vbCrLf)
            TxtDetails.AppendText(vbTab + "- RST : " + TCPFlag(3) + vbCrLf)
            TxtDetails.AppendText(vbTab + "- SYN : " + TCPFlag(4) + vbCrLf)
            TxtDetails.AppendText(vbTab + "- FIN : " + TCPFlag(5) + vbCrLf)
            Dim Fenetre As Integer = TabInterfaces(NoInterface).TCP_Fenetre(IdPacket)
            TxtDetails.AppendText("- Fenêtre : " + Fenetre.ToString + " (0x" + MyHex(Fenetre, 4) + ")" + vbCrLf)
            chk = TabInterfaces(NoInterface).TCP_CheckSum(IdPacket)
            TxtDetails.AppendText("- Checksum : " + chk.ToString + " (0x" + MyHex(chk, 4) + ")" + vbCrLf)
            Dim PtrDonneesURG As Integer = TabInterfaces(NoInterface).TCP_PtrDonneesURG(IdPacket)
            TxtDetails.AppendText("- Pointeur Données URG : " + PtrDonneesURG.ToString + " (0x" + MyHex(PtrDonneesURG, 4) + ")" + vbCrLf)
            ' ----Champ Options

        ElseIf Protocole = 17 Then
            ' Recupérer les infos UDP
            TxtDetails.AppendText("## Détail de l'entête UDP ##" + vbCrLf)
            TxtDetails.AppendText("- Port Source : " + TabInterfaces(NoInterface).GetPortSource(IdPacket) + vbCrLf)
            TxtDetails.AppendText("- Port Destination : " + TabInterfaces(NoInterface).GetPortDest(IdPacket) + vbCrLf)
            Dim Lg As Integer = TabInterfaces(NoInterface).UDP_Longueur(IdPacket)
            TxtDetails.AppendText("- Longueur : " + Lg.ToString + " (0x" + MyHex(Lg, 4) + ")" + vbCrLf)
            chk = TabInterfaces(NoInterface).UDP_CheckSum(IdPacket)
            TxtDetails.AppendText("- Checksum : " + chk.ToString + " (0x" + MyHex(chk, 4) + ")" + vbCrLf)

        ElseIf Protocole = 1 Then
            ' Recupérer les infos ICMP
            TxtDetails.AppendText("## Détail de l'entête ICMP ##" + vbCrLf)
            Dim TCD() As String = TabInterfaces(NoInterface).ICMP_TCD(IdPacket)
            TxtDetails.AppendText("- Type : " + TCD(0) + vbCrLf)
            TxtDetails.AppendText("- Code : " + TCD(1) + vbCrLf)
            TxtDetails.AppendText("- Descriptif : " + TCD(2) + vbCrLf)
            chk = TabInterfaces(NoInterface).ICMP_Checksum(IdPacket)
            TxtDetails.AppendText("- Checksum : " + chk.ToString + " (0x" + MyHex(chk, 4) + ")" + vbCrLf)
            Dim Identifiant As Integer = TabInterfaces(NoInterface).ICMP_Identifiant(IdPacket)
            TxtDetails.AppendText("- Identifiant : " + Identifiant.ToString + "  (0x" + MyHex(Identifiant, 4) + ")" + vbCrLf)
            Dim NumSeq As Long = TabInterfaces(NoInterface).ICMP_NoSequence(IdPacket)
            TxtDetails.AppendText("- Numéro de séquence : " + NumSeq.ToString + "  (0x" + MyHex(NumSeq, 4) + ")" + vbCrLf)

        ElseIf Protocole = 2 Then
            ' Recupérer les infos IGMP
            TxtDetails.AppendText("## Détail de l'entête IGMP ##" + vbCrLf)
            TxtDetails.AppendText("- Type : " + TabInterfaces(NoInterface).IGMP_Type(IdPacket) + vbCrLf)
            TxtDetails.AppendText("- Temps de réponse Max : " + TabInterfaces(NoInterface).IGMP_TempsReponse(IdPacket).ToString + " /10 éme s" + vbCrLf)
            chk = TabInterfaces(NoInterface).IGMP_CheckSum(IdPacket)
            TxtDetails.AppendText("- Checksum : " + chk.ToString + " (0x" + MyHex(chk, 4) + ")" + vbCrLf)
            TxtDetails.AppendText("- Adresse du groupe  : " + TabInterfaces(NoInterface).IGMP_AdresseGroupe(IdPacket) + vbCrLf)
        End If



    End Sub

    Public Function NsLookup(ByVal StrIP As String) As String
        Try
            Dim Host As IPHostEntry = Dns.GetHostEntry(StrIP)
            If Host.HostName = StrIP Then
                Return ("Domaine inexistant")
            Else
                Return Host.HostName
            End If

        Catch ex As Exception
            Return "Indéterminé"
        End Try
    End Function

End Class