Frage

Ich war sehr daran interessiert, sie zu verwenden Sharppcap, Aber bisher ist es nicht gut gelaufen.

Das Hauptproblem ist der folgende Code:

   private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
   {
        if(packet is TCPPacket)
        {                
            DateTime time = packet.Timeval.Date;
            int len = packet.PcapHeader.len;

            TCPPacket tcp = (TCPPacket)packet;
            string srcIp = tcp.SourceAddress;
            string dstIp = tcp.DestinationAddress;
            int srcPort = tcp.SourcePort;
            int dstPort = tcp.DestinationPort;

            Console.WriteLine("{0}:{1}:{2},
                {3} Len={4} {5}:{6} -> {7}:{8}", 
                time.Hour, time.Minute, time.Second, 
                time.Millisecond, len, srcIp, srcPort, 
                dstIp, dstPort);
        }
    }

"Der Typ- oder Namespace -TCPPacket konnte nicht gefunden werden"

Ok, also dachte ich, es muss tcPPacket sein? -Dann kam es zu diesem Fehler:

"Der angegebene Ausdruck ist nie vom Typ ('packetdotNet.tcppacket') type"

Das ignorieren:

"'Sharppcap.CaptureEventArgs' enthält keine Definition für 'TimeVal' und keine Erweiterungsmethode 'TimeVal', die ein erstes Argument vom Typ 'Sharppcap.CaptureEventArgs' akzeptiert.

Und so weiter und so weiter. Meine Frage ist also, fehlt mir etwas?

Ich habe die Paketdotnet- und SharppCap -Bibliothek und habe beide die Verwendung von Anweisungen hinzugefügt.

Lösung: paketpack = packet.parsepacket (packet.packet); TCPPACKET TCPPACKET = TCPPACKET.GETECAPSULDS (PACK);

    DateTime time = packet.Packet.Timeval.Date;
    int len = packet.Packet.Data.Length;

    if (tcpPacket != null)
    {
        IpPacket ipPacket = (IpPacket)tcpPacket.ParentPacket;


            IPAddress srcIp = ipPacket.SourceAddress;
            IPAddress dstIp = ipPacket.DestinationAddress;
            ushort srcPort = tcpPacket.SourcePort;
            ushort dstPort = tcpPacket.DestinationPort;

            MessageBox.Show(String.Format("{0}:{1}:{2},{3} Len={4} {5}:{6} -> {7}:{8}",
                                time.Hour, time.Minute, time.Second, time.Millisecond, len,
                                srcIp, srcPort, dstIp, dstPort)
                );
    }
War es hilfreich?

Lösung

Lösung:

Packet pack = Packet.ParsePacket(packet.Packet);
TcpPacket tcpPacket = TcpPacket.GetEncapsulated(pack);

DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;

if (tcpPacket != null)
{
    IpPacket ipPacket = (IpPacket)tcpPacket.ParentPacket;


        IPAddress srcIp = ipPacket.SourceAddress;
        IPAddress dstIp = ipPacket.DestinationAddress;
        ushort srcPort = tcpPacket.SourcePort;
        ushort dstPort = tcpPacket.DestinationPort;

        MessageBox.Show(String.Format("{0}:{1}:{2},{3} Len={4} {5}:{6} -> {7}:{8}",
                            time.Hour, time.Minute, time.Second, time.Millisecond, len,
                            srcIp, srcPort, dstIp, dstPort)
            );
}

Andere Tipps

Betrachten Sie den ersten Teil des Codes ...

private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
   {
        if(packet is TCPPacket)
        {    

Das Paket scheint von Typ CaptureEventargs, nicht tcPPacket zu sein. Wahrscheinlich gibt es eine Eigenschaft der Event -Argumente, die Ihr eigentliches Paket sind. Wenn das richtig ist, dann die

"'Sharppcap.CaptureEventArgs' enthält keine Definition für 'TimeVal' und keine Erweiterungsmethode 'TimeVal', die ein erstes Argument vom Typ 'Sharppcap.CaptureEventArgs' akzeptiert.

Ist wahrscheinlich aus diesem Grund wahr; Die CaptureEventargs und das Paket sind nicht dasselbe.

BEARBEITEN:

Ich würde so etwas versuchen wie:

private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
   {
        if(packet.packet is TCPPacket)
        {               
            TCPPacket tcpPack = (TCPPacket)(packet.packet);
            DateTime time = tcpPack.Timeval.Date;
            int len = tcpPack.PcapHeader.len;           
            string srcIp = tcpPack.SourceAddress;
            string dstIp = tcpPack.DestinationAddress;
            int srcPort = tcpPack.SourcePort;
            int dstPort = tcpPack.DestinationPort;

            Console.WriteLine("{0}:{1}:{2},
                {3} Len={4} {5}:{6} -> {7}:{8}", 
                time.Hour, time.Minute, time.Second, 
                time.Millisecond, len, srcIp, srcPort, 
                dstIp, dstPort);
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top