Question

J'ai été très intéressé à utiliser SharpPcap , mais jusqu'à présent cela n'a pas été va bien.

Le principal problème est le code suivant:

   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);
        }
    }
  

"Le TCPPacket de type ou espace de noms pourrait   pas trouvé "

OK, je me suis dit qu'il doit donc être TcpPacket? -mais il est venu avec cette erreur:

  

"L'expression donnée est jamais du   à condition que ( 'PacketDotNet.TcpPacket')   type "

Ignorant que:

  

" 'SharpPcap.CaptureEventArgs' ne pas   contiennent une définition pour « timeval » et   aucune méthode d'extension « timeval »   l'acceptation d'un premier argument de type   « SharpPcap.CaptureEventArgs » pourrait être   trouvé "

Et ainsi de suite, et ainsi de suite. Donc, ma question est, que je manque quelque chose?

Je les deux déclarations à l'aide de la Bibliothèque PacketDotNet et SharpPcap et ajoutés.

Solution:         Pack de paquet = 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)
                );
    }
Était-ce utile?

La solution

Solution:

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)
            );
}

Autres conseils

En regardant la première partie du code ...

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

paquet semble être de type CaptureEventArgs, pas TCPPacket. Probablement, il y a une propriété des args événement qui est votre paquet réel. Si cela est correct, le

  

" 'SharpPcap.CaptureEventArgs' ne pas   contiennent une définition pour « timeval » et   aucune méthode d'extension « timeval »   l'acceptation d'un premier argument de type   « SharpPcap.CaptureEventArgs » pourrait être   trouvé "

est probablement vrai pour cette raison; les CaptureEventArgs et le paquet ne sont pas la même chose.

EDIT:

Je voudrais essayer quelque chose comme:

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);
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top