0
votes
  1. receive packet.

    After I sent a packet, I also want to receive the packet which came from the destination of the previous packet.

    I tried to use ReceivePacket but always I got the null value for packet12.

    Is there anything I need to do more?

  2. set filter.

    I looked up the documents of pcap.net

    I assumed that the parameter ("ip and icmp") is the same as the filter which we can use in wireshark.

    ip.src == 192.168.15.32 and icmp
    

    But there was an error about this parameter. Is this different from the filter of wireshark?


Code:

using (PacketCommunicator inputCommunicator =
            selectedInputDevice.Open(65536, // portion of the packet to capture
                                            // 65536 guarantees that the whole packet will be captured on all the link layers
                PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
                1000)) // read timeout
        {
            using (PacketCommunicator outputCommunicator =
                selectedOutputDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000))
            {
                // Check the MAC type
                if (inputCommunicator.DataLink != outputCommunicator.DataLink)
                {
                    Console.WriteLine("Warning: the datalink of the capture differs from the one of the selected interface.");
                    Console.WriteLine("Press a key to continue, or CTRL+C to stop.");
                    Console.ReadKey();
                }

                // Allocate a send buffer
                using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
                {
                    // Fill the buffer with the packets from the file

                    PcapDotNet.Packets.Packet tpacket;
                    while (inputCommunicator.ReceivePacket(out tpacket) ==
                           PacketCommunicatorReceiveResult.Ok)
                    {
                        sendBuffer.Enqueue(tpacket);
                        ++numPackets;
                    }

                    //                        bool isSync = true;

                    // Transmit the queue
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    long startTimeMs = stopwatch.ElapsedMilliseconds;
                    Console.WriteLine("Start Time: " + DateTime.Now);

                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Sending a pcap file is in progress. Wait until it is finished");
                    Console.ResetColor();

                    outputCommunicator.Transmit(sendBuffer, isSync);

                    long endTimeMs = stopwatch.ElapsedMilliseconds;
                    Console.WriteLine("End Time: " + DateTime.Now);
                    long elapsedTimeMs = endTimeMs - startTimeMs;
                    Console.WriteLine("Elapsed Time: " + elapsedTimeMs);

                    Console.WriteLine("Elapsed time: " + elapsedTimeMs + " ms");
                    Console.WriteLine("Total packets generated = " + numPackets);
                    //                        Console.WriteLine("Average packets per second = " + averagePacketsPerSecond);
                    Console.WriteLine("============================================================");

                }
                inputCommunicator.SetFilter("ip and icmp");

                Console.WriteLine("Listening on " + selectedInputDevice.Description + "...");

                PcapDotNet.Packets.Packet packet12;

                inputCommunicator.ReceivePacket(out packet12);

               foreach (var options in packet12)
                    Console.WriteLine(options);
1

1 Answers

0
votes

1.

At one point it seems you use the inputCommunicator to

// Fill the buffer with the packets from the file

But in a different place you use the same inputCommunicator to get a packet send from some destination.

It seems like you'll need to use two different Communicators and create them using different devices.

2.

If you get an error, please provide the error.

Where did you get the syntax of ip.src? Did you try src host instead?