2016-04-14 17 views
0

Я следую этому руководству PcapDotNet/Pcap.Net. Но я постараюсь создать такой пакет, как на картинке Ethernet frame.Как построить Ethernet-пакет без каких-либо протоков Pcap.net C#?

private static Packet BuildEthernetPacket() 
    { 
     EthernetLayer ethernetLayer = 
      new EthernetLayer 
      { 
       Destination = new MacAddress("00:00:00:00:00:00"), 
       Source = new MacAddress("11:11:11:11:11:11"), 
       EtherType = EthernetType.None, // I select NONE for no IPV4 or ARP and so one protocole ... 
      }; 

     PayloadLayer payloadLayer = 
      new PayloadLayer 
      { 
       Data = new Datagram(Encoding.ASCII.GetBytes("Hello stackoverflow")), 
      }; 
     // The probleme it's here but the code build : 
     PacketBuilder builder = new PacketBuilder(ethernetLayer, payloadLayer); 
     return builder.Build(DateTime.Now); 
    } 

Visual Studio Community обнаружить ошибку "Не удается определить тип эфира автоматически из следующего слоя (PcapDotNet.Packets.PayloadLayer)" & 'System.ArgumentException' в PcapDotNet.Packets.dll
Но если я поменяю EthernetType.None by EthernetType.IpV4 или IpV6 или ARP и т. Д.. Нет проблем, но я не хочу добавлять другой протокол.

Заранее спасибо.

ответ

0

EtherType действительно не может быть None в пакете. Вы должны установить его на некоторое значение. Когда он установлен в None (или не установлен), Pcap.Net пытается вычислить его автоматически, используя следующий уровень. Однако следующий уровень в вашем коде - это PayloadLayer, который не дает информации об EtherType.

В принципе, EtherType должен сказать, как обрабатывать полезную нагрузку Ethernet. Если вы поместите какую-нибудь полезную нагрузку, должен быть способ ее разобрать.