SharpPcap проблема с размером пакета

147
06 марта 2018, 01:15

Сразу начну с сути проблемы, я хочу отправить на устройство echo пакет и при создании пакета размером больше, чем 255, выдает ошибку

byte[] packet = new byte[64000]; "Can't send packet: send error: PacketSendPacket failed"

сборка пакета была осуществлена вручную

    byte[] packet = new byte[64000];
    char[] ranMAC = MacDestination.ToCharArray(); //преобразуем мак адрес в символы
    int g = 0;
    //Адрес доставки
    for (int i = 0; i < ranMAC.Count(); i += 2)
    {
        string t = "" + ranMAC[i] + ranMAC[i + 1];
        packet[g] = Convert.ToByte(t, 16);
        g++;
    }

    char[] array = MacSource.ToCharArray();
    //Источник физ. адреса
    for (int i = 0; i < array.Count(); i += 2)
    {
        string t = "" + array[i] + array[i + 1];
        packet[g] = Convert.ToByte(t, 16);
        g++; //заполняем и идем дальше
    }
    packet[g++] = Convert.ToByte("08", 16);
    packet[g++] = Convert.ToByte("00", 16); //ip заголовок
    packet[g++] = Convert.ToByte("45", 16);
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = 0xF2; //тут должны быть длина пакета
    packet[g++] = 0xf9; //длина пакета
    packet[g++] = Convert.ToByte(("" + ranMAC[0] + ranMAC[1]), 16); // identifier
    packet[g++] = Convert.ToByte(("" + ranMAC[2] + ranMAC[3]), 16); 
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = Convert.ToByte("80", 16);
    packet[g++] = Convert.ToByte("01", 16);
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = Convert.ToByte("00", 16);
    byte[] tPacket = target.GetAddressBytes(); //ип адрес доставки
    foreach (byte b in tPacket)
    {
        packet[g] = b;
        g++;
    }

    tPacket = sources.GetAddressBytes(); //ип адрес
    foreach (byte b in tPacket)
    {
        packet[g] = b;
        g++;
    }
    Random rnd = new Random();
    packet[g++] = Convert.ToByte("08", 16);
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = Convert.ToByte("4d", 16); // чексума
    packet[g++] = Convert.ToByte("53", 16); //чексумму я вычислил вручную, опыта не хватает, чтобы сделать это автоматически
    packet[g++] = Convert.ToByte("00", 16);
    packet[g++] = Convert.ToByte("01", 16);
    packet[g++] = 0x00;
    packet[g++] = 0x08;
    packet[g++] = Convert.ToByte("61", 16);
    packet[g++] = Convert.ToByte("62", 16);
    packet[g++] = Convert.ToByte("63", 16);
    packet[g++] = Convert.ToByte("64", 16);
    packet[g++] = Convert.ToByte("65", 16);
    packet[g++] = Convert.ToByte("66", 16);
    packet[g++] = Convert.ToByte("67", 16);
    packet[g++] = Convert.ToByte("68", 16);
    packet[g++] = Convert.ToByte("69", 16);
    packet[g++] = Convert.ToByte("6a", 16);
    packet[g++] = Convert.ToByte("6b", 16);
    packet[g++] = Convert.ToByte("6c", 16);
    packet[g++] = Convert.ToByte("6d", 16);
    packet[g++] = Convert.ToByte("6e", 16);
    packet[g++] = Convert.ToByte("6f", 16);
    packet[g++] = Convert.ToByte("70", 16);
    packet[g++] = Convert.ToByte("71", 16);
    packet[g++] = Convert.ToByte("72", 16);
    packet[g++] = Convert.ToByte("73", 16);
    packet[g++] = Convert.ToByte("74", 16);
    packet[g++] = Convert.ToByte("75", 16);
    packet[g++] = Convert.ToByte("76", 16);
    packet[g++] = Convert.ToByte("77", 16);
    packet[g++] = Convert.ToByte("61", 16);
    packet[g++] = Convert.ToByte("62", 16);
    packet[g++] = Convert.ToByte("63", 16);
    packet[g++] = Convert.ToByte("64", 16);
    packet[g++] = Convert.ToByte("65", 16);
    packet[g++] = Convert.ToByte("66", 16);
    packet[g++] = Convert.ToByte("67", 16);
    packet[g++] = Convert.ToByte("68", 16);
    packet[g++] = Convert.ToByte("69", 16);
        //завершаем пакет
            device.SendPacket(packet);
}

Приветствуется любая помощь и даже ссылки на документацию(ибо в интернете половину мертвы либо на старую версию)

READ ALSO
Проблема с открытием сетевой папки

Проблема с открытием сетевой папки

Добрый деньНужен совет, потому что я не понимаю в какую сторону копать для решения проблемы

173
Передать На вторую форму значение label

Передать На вторую форму значение label

При нажатии на ячейку открывается новая форма, где должен отобразиться текст label:

169
C# Функция запрос-ответ в System.IO.Ports.SerialPort

C# Функция запрос-ответ в System.IO.Ports.SerialPort

Здравствуйте, есть функция которая отправляет в послед порт N байт, и ожидает получение ответа (N байт ответа) заданное время, если данные получены...

170
Функция 0x06 Modbus RTU C#

Функция 0x06 Modbus RTU C#

Нашел неплохой пример для работы с протоколом Modbus RTU Code Project

150