Использование pcapdotnet для отправки необработанного пакета Ethernet - PullRequest
1 голос
/ 06 октября 2011

Я использую pcapdotnet и хотел бы отправить необработанный пакет Ethernet.Я работаю с примером, найденным здесь: http://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Sending%20Packets

Я хотел бы знать две вещи:

  1. Чтобы изменить это для отправки пакетов уровня Mac, мне нужно оставить толькоethernetLayer в конструкторе PacketBuilder?
  2. Как загрузить пакет с необработанными битовыми / байтовыми данными, которые я хочу отправить в пакете ethernet?

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Я считаю, что вам нужно использовать 2 уровня:

  1. EthernetLayer (для заголовка Ethernet).
  2. PayloadLayer (для необработанных байтовых данных - полезная нагрузка Ethernet).
0 голосов
/ 17 сентября 2016
class Program
{
    static void Main(string[] args)
    {
        // Retrieve the device list from the local machine
        IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

        if (allDevices.Count == 0)
        {
            Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
            return;
        }

        // Print the list
        for (int i = 0; i != allDevices.Count; ++i)
        {
            LivePacketDevice device = allDevices[i];
            Console.Write((i + 1) + ". " + device.Name);
            if (device.Description != null)
                Console.WriteLine(" (" + device.Description + ")");
            else
                Console.WriteLine(" (No description available)");
        }

        int deviceIndex = 0;
        do
        {
            Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
            string deviceIndexString = Console.ReadLine();
            if (!int.TryParse(deviceIndexString, out deviceIndex) ||
                deviceIndex < 1 || deviceIndex > allDevices.Count)
            {
                deviceIndex = 0;
            }
        } while (deviceIndex == 0);

        // Take the selected adapter
        PacketDevice selectedDevice = allDevices[deviceIndex - 1];

        // Open the output device
        using (PacketCommunicator communicator = selectedDevice.Open(100, // name of the device
                                                                     PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
                                                                     1000)) // read timeout
        {
            // Supposing to be on ethernet, set mac source to 01:01:01:01:01:01
            MacAddress source = new MacAddress("01:01:01:01:01:01");

            // set mac destination to 02:02:02:02:02:02
            MacAddress destination = new MacAddress("02:02:02:02:02:02");

            // Create the packets layers

            // Ethernet Layer
            EthernetLayer ethernetLayer = new EthernetLayer
            {
                Source = source,
                Destination = destination
            };

            // IPv4 Layer
            IpV4Layer ipV4Layer = new IpV4Layer
            {
                Source = new IpV4Address("1.2.3.4"),
                Ttl = 128,
                // The rest of the important parameters will be set for each packet
            };

            // ICMP Layer
            IcmpEchoLayer icmpLayer = new IcmpEchoLayer();

            // Create the builder that will build our packets
            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            // Send 100 Pings to different destination with different parameters
            for (int i = 0; i != 1; ++i)
            {
                // Set IPv4 parameters
                ipV4Layer.CurrentDestination = new IpV4Address("2.3.4.1" );
                ipV4Layer.Identification = (ushort)i;

                // Set ICMP parameters
                icmpLayer.SequenceNumber = (ushort)i;
                icmpLayer.Identifier = (ushort)i;
                // Build the packet
                Packet packet = builder.Build(DateTime.Now);

                // Send down the packet
               communicator.SendPacket(packet);
            }

        }
        Console.ReadLine();
    }
...