Liebe Forumsbesucher,
ich habe einen funktionierenden Sniffer, welcher alle ein- und ausgehenden Packete eines Endpunktes liest und der so gestartet wird:
Private m_Socket As Socket ' Ein Socket zum Sniffen.
''' <summary>
''' Mit dem Schnüffeln beginnen.
''' </summary>
Public Sub StartSniff()
Try
m_Socket = New Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP) ' Einen neuen Socket zum Abhören erstellen.
m_Socket.Bind(New IPEndPoint(IPAddress.Parse(m_IPv4Adr), 0)) ' Den Socket an die lokale IPv4-Adresse binden.
m_Socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, True) ' Die Optionen des Sockets festlegen.
m_Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(3), Nothing) ' Betriebsmodi für den Socket festlegen.
' Ein Packet asynchron lesen.
m_Socket.BeginReceive(m_PacketBuffer, 0, m_PacketBuffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnReceive), Nothing)
Catch ex As Exception
StopSniff()
End Try
End Sub
In einer weiteren Methode lese ich die Daten aus dem Header.
Meine Frage: Wie kann ich zwischen ein- und ausgehenden Packeten unterscheiden? Oder anders gefragt: Wie muss ich den Socket konfigurieren, um nur ein- oder nur ausgehende Packete "abzuhören"? Ich denke, es müßte an dieser Zeile
etwas geändert werden:
m_Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(3), Nothing)
Um es zu verdeutlichen, das Problem tritt dann auf, wenn die IP-Adressen und Ports lokal und remote spiegelverkehrt vorhanden sind. Beispiel:
Anwendung local IP local Port remote IP remote Port
firefox 127.0.0.1 50808 127.0.0.1 50809
firefox 127.0.0.1 50809 127.0.0.1 50808
In den Packeten ist nur die Information enthalten, welcher Adresse die Quelle und welche das Ziel ist. Im oben genannten Beispiel ist aus diesen Informationen alleine die Richtung nicht feststellbar.
Für eure Antworten bin ich sehr dankbar.
VG Stefan