Example #1
0
        public PDU(UdpDatagram datagram)
        {
            _udp = datagram;
            MemoryStream        stream  = new MemoryStream(datagram.UdpData);
            BasicEncodingReader _reader = new BasicEncodingReader(stream);

            Asn1Type seqType   = _reader.ReadType();
            int      seqLength = _reader.ReadLength();

            Version   = _reader.ReadInteger();
            Community = _reader.ReadOctetString();

            Asn1Type t = _reader.ReadType();

            PduType = (PduType)(t.Byte & 0x1F);
            if (PduType == Snmp.PduType.Trap)
            {
                throw new NotImplementedException("SNMP v1 traps are not yet implemented");
            }

            int len = _reader.ReadLength();

            RequestId   = _reader.ReadInteger();
            ErrorStatus = _reader.ReadInteger();
            ErrorIndex  = _reader.ReadInteger();

            Asn1Type type = _reader.ReadType();

            if (type.Class != Asn1Class.Universal && type.Tag != Asn1Tag.Sequence)
            {
                throw new Exception("Sequence expected");
            }

            int length = _reader.ReadLength();

            VarBinds = new SortedDictionary <string, object>();
            var list = _reader.ReadConstructedType(length);

            foreach (List <object> seq in list)
            {
                string oid = (string)seq[0];
                VarBinds.Add(oid, seq[1]);
            }
        }
Example #2
0
        static void Asn1Encoding()
        {
            Console.WriteLine("\n======================= {0} =======================\n", MethodInfo.GetCurrentMethod().Name);

            var packets = PcapNg.ReadForward(fileName)
                          .Where(b => b.Type == BlockType.EnhancedPacketBlock)
                          .Cast <EnhancedPacketBlock>()
                          .Take(5);

            foreach (var packet in packets)
            {
                int snmpLen = packet.PacketData.Length - 42; // 42 is the size of Ethernet + IP + UDP headers

                byte[] datagram = new byte[snmpLen];
                Array.Copy(packet.PacketData, 42, datagram, 0, snmpLen);

                Console.WriteLine(BasicEncodingReader.ReadAllText(datagram));
            }
        }