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);
        }
Esempio n. 2
0
        public void ParseProtocol(Packet packet, StatisticsRecord statisticsRecord)
        {
            CdpPacket cdpPacket = (CdpPacket)packet;

            statisticsRecord.NetworkInterfaceLayer = cdpPacket.GetType().Name.Replace("Packet", "");
        }
Esempio n. 3
0
        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();
        }