protected override Packet ParsePayloadPacket(LogicalLayerControlPacket packet) { Packet payloadPacket = null; if (packet.IsSnap) { if (packet.DestinationHardwareAddress.ToString().Equals("")) { if (packet.OrganizationIdentification == 12) { if (packet.ProtocolId == 8192) { payloadPacket = new CdpPacket(); } } } } return(payloadPacket); }
public void ParseProtocol(Packet packet, StatisticsRecord statisticsRecord) { CdpPacket cdpPacket = (CdpPacket)packet; statisticsRecord.NetworkInterfaceLayer = cdpPacket.GetType().Name.Replace("Packet", ""); }
static void Main(string[] args) { // Find all Ethernet adapters on the machine. var ethernetInterfaces = from nic in NetworkInterface.GetAllNetworkInterfaces() where nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet || nic.NetworkInterfaceType == NetworkInterfaceType.FastEthernetFx || nic.NetworkInterfaceType == NetworkInterfaceType.FastEthernetT || nic.NetworkInterfaceType == NetworkInterfaceType.GigabitEthernet select nic ; JsonSerializerSettings serializerSettings = new JsonSerializerSettings() { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(), DateTimeZoneHandling = DateTimeZoneHandling.Utc, NullValueHandling = NullValueHandling.Ignore }; serializerSettings.Converters.Add(new IPAddressConverter()); serializerSettings.Converters.Add(new IPEndPointConverter()); var tasks = new List <Task>(); foreach (var nic in ethernetInterfaces) { Console.WriteLine("Starting CDP for interface " + nic.Name + " of type " + nic.NetworkInterfaceType.ToString()); Task.Factory.StartNew( async() => { var llcSocket = new LLCSocket(nic.GetPhysicalAddress()); llcSocket.RegisterMacOnInterface(nic.Name, CdpAddress); while (true) { var packet = llcSocket.ReceiveFrom(out PhysicalAddress remoteHost); CdpPacket parsed = null; try { Console.WriteLine("Parsing packet"); parsed = CdpPacketParser.Parse(packet); Console.WriteLine("Packet parsed"); } catch (Exception e) { Console.WriteLine("Exception while parsing: " + e.Message); } if (parsed != null) { var message = new CdpApiMessage { ReceivedOn = nic.Name, ReceivedAt = DateTimeOffset.Now, SourceMac = remoteHost.ToString(), Packet = parsed }; var dataAsString = JsonConvert.SerializeObject(message, serializerSettings); var content = new StringContent(dataAsString); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); Console.WriteLine("Preparing to send packet"); Console.WriteLine("Sending " + dataAsString); var client = new HttpClient(); await client.PostAsync("http://192.168.70.1:51954/api/cdp", content); Console.WriteLine("Data sent"); } } }, TaskCreationOptions.LongRunning ); } Console.WriteLine("Press any key to exit"); Console.ReadKey(); }