Imports dotnetWinpCap

Public Class Form1
    Dim WithEvents sniffer As New dotnetWinpCap 'Der Sniffer selbst (man kann man mehreren Interfaces gleichzeitig mitsniffern) wichtig ist das withevents, weil man sonst keine Ereignisse abfangen kann
    Dim out As String = "" 'Dient nur zum zwischenspeichern des Outputs (auf die Textbox darf ich im Event nicht zugreifen, da anderer Thread)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim devs As ArrayList = FindAllDevs() 'Liest alle verfügbaren Interfaces ein

        Dim mydev As New Device 'Das Device, das ich haben will

        For Each dev As Device In devs 'Alle Devices durchsuchen
            If dev.Address = "192.168.0.1" Then '192.168.0.1 ist meine Ethernet Karte. Wenn die gefunden wird, dann auswählen (da kann man auch eine Kombobox draus machen zum selbst auswählen)
                mydev = dev 'Das Device speichern (dev ist ja nur in der for schleife sichtbar)
            End If
        Next

        sniffer.Open(mydev.Name, 1518, 1, 1000000000) 'Das Device, die maximale Länge, des Pakets, das aufgezeichnet wird (1518 ist das theoretische Maximum bei Ethernet), 1 ist promiscious mode (jeden Traffic anzeigen, auch der, der nicht für mich ist), die Lange Zeit ist der Timeout (will ich nicht, brauch ich nicht, readnext funzt eh nicht)
        sniffer.SetMinToCopy(64) 'Die Minimale Länge eines Pakets, ab der receivepacket das Ereigenis auslöst (64Byte ist die minimale Paketlänge, mehr zeigt die Pakete erst später an, braucht aber mehr CPU)
        sniffer.StartListen() 'Das sniffern starten
    End Sub

    Private Sub handlePacket(ByVal sender As Object, ByVal packet As PacketHeader, ByVal data() As Byte) Handles sniffer.OnReceivePacket 'Ereignis, das bei jedem Paket ausgelöst wird (packet ist unser Header (Zeitpunkt,Länge usw.), data sind die Daten (ob gesendet oder empfangen, müssen wir anhand der MAC Adressen herausfinden)
        out = out + packet.TimeStamp.ToString + " " + packet.Length.ToString + "Bytes" + vbCrLf 'Zeile anhängen
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'Alle 100ms das GUI aktualisieren
        txt_out.AppendText(out)
        out = ""
    End Sub
End Class