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