2016-04-14 6 views
0

Ich folge diesem Tutorial PcapDotNet/Pcap.Net. Aber ich werde versuchen, ein Paket wie dieses Bild Ethernet frame zu bauen.Wie baut man ein Ethernet-Paket ohne Protocol 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 Gemeinschaft einen Fehler erkennen "nicht bestimmen kann, Ether-Typ automatisch ab dem nächsten Schicht (PcapDotNet.Packets.PayloadLayer)" & 'System.ArgumentException' in PcapDotNet.Packets.dll
Aber wenn ich ändern EthernetType.None von EthernetType.IpV4 oder IpV6 oder ARP und so weiter. Es gibt kein Problem, aber ich möchte kein anderes Protokoll hinzufügen.

Vielen Dank im Voraus.

Antwort

0

EtherType kann nicht wirklich keiner in einem Paket sein. Sie sollten es auf einen Wert festlegen. Wenn Pcap.Net auf None (oder nicht gesetzt) ​​eingestellt ist, versucht Pcap.Net, es automatisch mit der nächsten Ebene zu berechnen. Die nächste Ebene in Ihrem Code ist jedoch der PayloadLayer, der keine Informationen zum EtherType enthält.

Grundsätzlich sollte der EtherType angeben, wie die Ethernet-Nutzlast geparst werden soll. Wenn Sie etwas Payload hinzufügen, sollte es eine Möglichkeit geben, es zu parsen.