Exemple #1
0
        public void AddFiled(string name)
        {
            if (FieldIds.ContainsKey(name))
            {
                return;
            }
            uint id;

            if (NetmonAPI.NmAddField(this.FrameParserConfig, name, out id) == 0)
            {
                FieldIds[name] = id;
                NeedsRebuild   = true;
            }
        }
Exemple #2
0
        public void AddProperty(string name)
        {
            if (PropertyIds.ContainsKey(name))
            {
                return;
            }
            uint id;

            if (NetmonAPI.NmAddProperty(this.FrameParserConfig, name, out id) == 0)
            {
                PropertyIds[name] = id;
                NeedsRebuild      = true;
            }
        }
Exemple #3
0
        public void Setup()
        {
            NM_API_CONFIGURATION apiConfig = new NM_API_CONFIGURATION();

            apiConfig.Size = (ushort)System.Runtime.InteropServices.Marshal.SizeOf(typeof(NM_API_CONFIGURATION));
            uint status = NetmonAPI.NmGetApiConfiguration(ref apiConfig);

            apiConfig.ThreadingMode = 0;
            uint errno = NetmonAPI.NmApiInitialize(ref apiConfig);

            if (errno != 0)
            {
                throw new Exception("Error NmApiInitalize. Errno: " + errno);
            }
        }
        /// <summary>
        /// Stops the capture and clean the capture engine handle.
        /// </summary>
        /// <param name="adapterIndex"></param>
        /// <returns></returns>
        public bool StopCapture(List <uint> adapters)
        {
            if (this.captureEngineHandle != IntPtr.Zero)
            {
                foreach (uint adapterIndex in adapters)
                {
                    NetmonAPI.NmStopCapture(this.captureEngineHandle, adapterIndex);
                }

                NetmonAPI.NmCloseHandle(this.captureFileHandle);
                this.captureFileHandle = IntPtr.Zero;
            }

            return(true);
        }
Exemple #5
0
        public string GetPropertyString(string name)
        {
            if (this.Parser == null)
            {
                return(null);
            }

            if (!this.Parser.HasProperty(name))
            {
                return(null);
            }


            uint fieldId = this.Parser.Property(name);

            uint ulLength = 255;
            NmPropertyValueType vt;

            unsafe
            {
                byte[] uintBuffer = new byte[255];
                fixed(byte *pbuf = uintBuffer)
                {
                    uint ret = NetmonAPI.NmGetPropertyById(Parser.Handle, fieldId, ulLength, pbuf, out ulLength, out vt, 0, null);

                    if (ret == 122 && vt == NmPropertyValueType.PropertyValueString)
                    {
                        uintBuffer = new byte[ulLength];
                        fixed(byte *pbuf2 = uintBuffer)
                        {
                            if (0 == NetmonAPI.NmGetPropertyById(Parser.Handle, fieldId, ulLength, pbuf2, out ulLength, out vt, 0, null))
                            {
                                //uintBuffer.to
                                return(System.Text.Encoding.Unicode.GetString(uintBuffer, 0, (int)ulLength).Trim('\0'));
                            }
                        }
                    }
                    else if (ret == 0 && vt == NmPropertyValueType.PropertyValueString)
                    {
                        return(System.Text.Encoding.Unicode.GetString(uintBuffer, 0, (int)ulLength).Trim('\0'));
                    }
                }
            }

            return(null);
        }
        public void Stop()
        {
            uint errno;

            errno = NetmonAPI.NmStopCapture(this.capEngine, 1);
            if (errno != 0)
            {
                Console.Write("Error Stopping Capture");
            }


            NetmonAPI.NmCloseHandle(this.capEngine);
            this.capEngine = IntPtr.Zero;

            NetmonAPI.NmCloseHandle(this.capFile);
            this.capFile = IntPtr.Zero;
        }
        public void Dispose()
        {
            if (this.Disposed == false)
            {
                this.Disposed = true;

                if (Disposing)
                {
                    NetmonAPI.NmCloseHandle(this.captureEngineHandle);
                    NetmonAPI.NmCloseHandle(this.captureFileHandle);
                }

                // Free the unmanaged resource ...
                this.captureEngineHandle = IntPtr.Zero;
                this.captureFileHandle   = IntPtr.Zero;
            }
        }
        /// <summary>
        /// http://blogs.technet.com/b/netmon/archive/2009/10/07/using-nmapi-to-access-tcp-payload.aspx
        /// use property: property.tcppayloadlength, fields: tcp.srcport, tcp.dataoffset.dataoffset to calculate the payload length, and the offset in the raw frame.
        /// use NmGetPartialRawFrame to get the payload.
        /// </summary>
        private void GetTcpPayLoad()
        {
            unsafe
            {
                uint ret;
                byte tcpHeaderSize;            //
                uint tcpSrcOffset, tcpSrcSize; // offset: bits
                var  tcpPayloadLength = PropertyValueDict[NetmonPropertyName.TcpPayloadLength];
                int  payloadlen;
                bool result = Int32.TryParse(tcpPayloadLength.ToString(), out payloadlen);

                // Allocate a buffer for payload data. The maximum length=1460 bytes
                IntPtr buff = Marshal.AllocHGlobal(1500);
                if (payloadlen > 0)
                {
                    // Get the Data Offset, used to determine the TCP header size
                    ret = NetmonAPI.NmGetFieldValueNumber8Bit(_FrameInfoUnit.ParsedFrame, _FrameInfoUnit.FieldIdDict[NetmonFieldName.TcpDataSet], out tcpHeaderSize);
                    //Get the Offset of TCP.SrcPort which is the first field in TCP.
                    ret = NetmonAPI.NmGetFieldOffsetAndSize(_FrameInfoUnit.ParsedFrame, _FrameInfoUnit.FieldIdDict[NetmonFieldName.TcpSrcPort], out tcpSrcOffset, out tcpSrcSize);
                    // Read in the partial frame.  The Offset is in bits.  TCPHeaderSize is off by a factor of 4.
                    uint retlen;
                    uint offset = (uint)(tcpSrcOffset / 8 + tcpHeaderSize * 4);
                    ret = NetmonAPI.NmGetPartialRawFrame(_FrameInfoUnit.RawFrame, offset, (uint)payloadlen, (byte *)buff, out retlen);
                    // cast the intptr to the byte.
                    byte[] _payload = new byte[payloadlen];
                    Marshal.Copy(buff, _payload, 0, payloadlen);

                    //var str = Encoding.Default.GetString(_payload);
                    frameUnit.fieldUnit.PayLoad = _payload;

                    /*
                     * if (protocolname == "TCP")
                     * {
                     * frameUnit.fieldUnit.tcpPayLoad = _payload;
                     * }
                     * else
                     * {
                     * frameUnit.fieldUnit.httpPayLoad = _payload;
                     * // Console.WriteLine("http payload:");
                     * //Console.WriteLine(str);
                     * }*/
                }
                Marshal.Release(buff);
            }
        }
        /// <summary>
        /// Start the NMCapture engine to collect traffic data
        /// </summary>
        /// <param name="adapterIndex">index of the target adapter.</param>
        /// <returns></returns>
        public bool StartCapture(List <uint> adapters, string captureFile)
        {
            uint errno;

            // Create a caputre file for storing trace
            errno = NetmonAPI.NmCreateCaptureFile(
                captureFile,
                CaptureFileSize,
                NmCaptureFileFlag.WrapAround,
                out this.captureFileHandle,
                out this.captureFileSize);

            if (errno != 0)
            {
                throw new Exception(FormatErrMsg("NmCreateCaptureFile() failed", errno));
            }

            return(StartCapture(adapters));
        }
        /// <summary>
        /// Start the NMCapture engine to collect traffic data. The trace file handle must be provided.
        /// </summary>
        /// <param name="adapterIndex">index of the target adapter.</param>
        /// <returns></returns>
        public bool StartCapture(List <uint> adapters)
        {
            uint errno;

            try
            {
                foreach (uint adapterIndex in adapters)
                {
                    //Configure Adapter for capturing
                    errno = NetmonAPI.NmConfigAdapter(
                        this.captureEngineHandle,
                        adapterIndex,
                        CaptureCb,
                        this.captureFileHandle,
                        NmCaptureCallbackExitMode.DiscardRemainFrames);

                    if (errno != 0)
                    {
                        throw new Exception(FormatErrMsg("NmConfigAdapter() failed", errno));
                    }

                    errno = NetmonAPI.NmStartCapture(this.captureEngineHandle, adapterIndex, NmCaptureMode.LocalOnly);
                    if (errno != 0)
                    {
                        throw new Exception(FormatErrMsg("NmStartCapture() failed", errno));
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                NetmonAPI.NmCloseHandle(this.captureEngineHandle);
                NetmonAPI.NmCloseHandle(this.captureFileHandle);
                this.captureEngineHandle = IntPtr.Zero;
                this.captureFileHandle   = IntPtr.Zero;

                ErrorMsg += ex.ToString();

                return(false);
            }
        }
        /// <summary>
        /// get all properties value by id
        /// </summary>
        private void GetPropertyValue()
        {
            foreach (KeyValuePair <string, uint> pair in _FrameInfoUnit.PropertyIdDict)
            {
                unsafe
                {
                    uint   ret1;
                    IntPtr buff      = Marshal.AllocHGlobal(2000);
                    uint   returnLen = 0;
                    NmPropertyValueType value;
                    string property = pair.Key;
                    uint   id       = pair.Value;
                    ret1 = NetmonAPI.NmGetPropertyById(_FrameInfoUnit.FrameParser, id, 2000, (byte *)buff, out returnLen, out value, 0, new CNmPropertyStorageKey[1]);

                    //Console.WriteLine(value);
                    if (value == NmPropertyValueType.PropertyValueSignedNumber)
                    {
                        PropertyValueDict.Add(property, Marshal.ReadInt64(buff));
                    }
                    if (value == NmPropertyValueType.PropertyValueString)
                    {
                        PropertyValueDict.Add(property, Marshal.PtrToStringAuto(buff));
                    }
                    if (value == NmPropertyValueType.PropertyValueUnsignedNumber)
                    {
                        PropertyValueDict.Add(property, Marshal.ReadInt64(buff));
                    }
                    if (value == NmPropertyValueType.PropertyValueByteBlob)//to do here
                    {
                    }
                    if (value == NmPropertyValueType.PropertyValueNone) // no such data in the frame
                    {
                        PropertyValueDict.Add(property, NoneTypeMatched);
                    }
                    Marshal.Release(buff);
                }
            }
        }
        private String GetIPAddr(uint fieldId)
        {
            IpAddress reAddr = new IpAddress()
            {
                ad1 = 0,
                ad2 = 0,
                ad3 = 0,
                ad4 = 0
            };

            unsafe
            {
                IntPtr add = Marshal.AllocHGlobal(4);

                uint relen;
                uint ret1;
                ret1   = NetmonAPI.NmGetFieldInBuffer(_FrameInfoUnit.ParsedFrame, fieldId, (uint)4, (byte *)add, out relen);
                reAddr = (IpAddress)Marshal.PtrToStructure(add, typeof(IpAddress));
                Marshal.Release(add);
            }

            return(IpAddrToString(reAddr));
        }
        private uint ConfigureCaptureEngine(ushort threadingModel)
        {
            uint errno;

            NM_API_CONFIGURATION apiConfig = new NM_API_CONFIGURATION();

            apiConfig.Size = (ushort)Marshal.SizeOf(apiConfig);
            errno          = NetmonAPI.NmGetApiConfiguration(ref apiConfig);
            if (errno != 0)
            {
                throw new Exception(FormatErrMsg("Unable to retrieve configuration.", errno));
            }

            apiConfig.ThreadingMode = threadingModel; //threading model:

            errno = NetmonAPI.NmApiInitialize(ref apiConfig);
            if (errno != 0)
            {
                throw new Exception(FormatErrMsg("Unable to initialize configuration.", errno));
            }

            // Open a Capture Engine.
            return(NetmonAPI.NmOpenCaptureEngine(out this.captureEngineHandle));
        }
Exemple #14
0
        public byte[] GetFieldBuffer(string name)
        {
            if (this.Parser == null)
            {
                return(null);
            }

            if (!this.Parser.HasField(name))
            {
                return(null);
            }

            uint offset, bsize;
            uint fieldId = this.Parser.Field(name);

            if (0 == NetmonAPI.NmGetFieldOffsetAndSize(ParsedFrame, fieldId, out offset, out bsize))
            {
                if (bsize > 0)
                {
                    uint   size  = bsize / 8;
                    byte[] bytes = new byte[bsize / 8];
                    UInt32 uRet;
                    unsafe
                    {
                        fixed(byte *ptr = bytes)
                        {
                            if (0 == NetmonAPI.NmGetFieldInBuffer(ParsedFrame, fieldId, size, ptr, out uRet))
                            {
                                return(bytes);
                            }
                        }
                    }
                }
            }
            return(null);
        }
        public IntPtr CreateFrameParser()
        {
            IntPtr FrameParser    = IntPtr.Zero;
            UInt32 ret            = 0;
            IntPtr pCallerContext = IntPtr.Zero;
            IntPtr nplParser      = IntPtr.Zero;

            // Use NULL to load default NPL set.
            ret = NetmonAPI.NmLoadNplParser(null, NmNplParserLoadingOption.NmAppendRegisteredNplSets, pParserCallback, pCallerContext, out nplParser);
            if (ret != ERROR_SUCCESS)
            {
                Console.WriteLine("Failed to load NPL Parser");
                return(FrameParser);
            }
            IntPtr frameParserConfig = IntPtr.Zero;

            ret = NetmonAPI.NmCreateFrameParserConfiguration(nplParser, pParserCallback, pCallerContext, out frameParserConfig);
            if (ret != ERROR_SUCCESS)
            {
                Console.WriteLine("Failed to load frame parser configuration.");
                NetmonAPI.NmCloseHandle(nplParser);//release the handler
                return(FrameParser);
            }
            else  //now start to add filter
            {
                ret = NetmonAPI.NmConfigReassembly(frameParserConfig, NmReassemblyConfigOption.None, true);
                if (ret != ERROR_SUCCESS)
                {
                    Console.WriteLine("Failed to config reassembly.");
                    return(FrameParser);
                }
                String pfilterString = _filterString;

                Console.WriteLine(pfilterString);

                ret = NetmonAPI.NmAddFilter(frameParserConfig, pfilterString, out ulfilterId);
                if (ret != ERROR_SUCCESS)
                {
                    Console.WriteLine("error to create filter,info:" + ret.ToString());
                    NetmonAPI.NmCloseHandle(frameParserConfig);
                    NetmonAPI.NmCloseHandle(nplParser);
                    return(FrameParser);
                }

                //add the properties
                foreach (String propertyString in _properties)
                {
                    Console.WriteLine("add property:" + propertyString);
                    UInt32 ulpropertyId;
                    ret = NetmonAPI.NmAddProperty(frameParserConfig, propertyString, out ulpropertyId);
                    if (ret == ERROR_SUCCESS)
                    {
                        PropertyIdDict.Add(propertyString, ulpropertyId);
                    }
                    else
                    {
                        Console.WriteLine("error when add property:" + propertyString);
                    }
                }
                //add fields
                foreach (String filedString in _fields)
                {
                    Console.WriteLine("add field:" + filedString);
                    UInt32 ulfieldId;
                    ret = NetmonAPI.NmAddField(frameParserConfig, filedString, out ulfieldId);
                    if (ret == ERROR_SUCCESS)
                    {
                        FieldIdDict.Add(filedString, ulfieldId);
                    }
                    else
                    {
                        Console.WriteLine("error when add field:" + filedString);
                    }
                }


                ret = NetmonAPI.NmCreateFrameParser(frameParserConfig, out FrameParser, NmFrameParserOptimizeOption.ParserOptimizeNone);

                if (ret != ERROR_SUCCESS)
                {
                    Console.WriteLine("failed to create frame parser, info:" + ret.ToString());

                    return(FrameParser);
                }
            }

            return(FrameParser);
        }
Exemple #16
0
        private void Run()
        {
            IntPtr rawFrame;
            UInt32 ret;

            int count = 0;

            if (ERROR_SUCCESS == NetmonAPI.NmOpenCaptureFile(_capfile, out rawFrame))
            {
                UInt32 frameCount = 0;

                Filtering _nmfilter = new Filtering(_filterString, _Outproperties, _Outfields);
                myFrameParser = _nmfilter.CreateFrameParser();
                ret           = NetmonAPI.NmGetFrameCount(rawFrame, out frameCount);//get the count of the frames
                // Console.WriteLine("framecount:" + frameCount);

                for (UInt32 framenumber = 0; framenumber < frameCount; framenumber++)//for each frame, apply the filter
                {
                    // Console.WriteLine("framenumber:" + framenumber);
                    _currentframeNumber = (int)framenumber + 1;
                    IntPtr OneRawframe;
                    ret = NetmonAPI.NmGetFrame(rawFrame, framenumber, out OneRawframe); //
                    if (ret == ERROR_SUCCESS)
                    {
                        IntPtr parsedFrame, insFrame;
                        ret = NetmonAPI.NmParseFrame(myFrameParser, OneRawframe, framenumber, NmFrameParsingOption.None, out parsedFrame, out insFrame);

                        if (ret == ERROR_SUCCESS)
                        {
                            //Console.WriteLine("start to");
                            bool Passed = false;
                            ret = NetmonAPI.NmEvaluateFilter(parsedFrame, _nmfilter.ulfilterId, out Passed);
                            if (ret == ERROR_SUCCESS && Passed == true)
                            {
                                //construct
                                _getframeUnit.FieldIdDict    = _nmfilter.FieldIdDict;
                                _getframeUnit.PropertyIdDict = _nmfilter.PropertyIdDict;
                                _getframeUnit.ParsedFrame    = parsedFrame;
                                _getframeUnit.RawFrame       = OneRawframe;
                                _getframeUnit.FrameParser    = myFrameParser;
                                _getframeUnit.FrameNumber    = _currentframeNumber;
                                _getframeUnit.Pids           = _pids.ToList();
                                //Console.WriteLine(_currentframeNumber);
                                _getFrameValue = new GetFrameValue(_getframeUnit, _currentframeNumber);
                                if (_getFrameValue.frameUnit.propertyUnit.tcpPayloadLength > 0)
                                {
                                    AllGetFrames.Add(_getFrameValue.frameUnit);
                                    count++;
                                }
                            }

                            NetmonAPI.NmCloseHandle(parsedFrame);
                            NetmonAPI.NmCloseHandle(insFrame);
                        }
                        else
                        {
                            Console.WriteLine("error parsing frame:" + ret);
                        }
                        NetmonAPI.NmCloseHandle(OneRawframe);//release the cuurent parsed frame
                    }
                    else
                    {
                        Console.WriteLine("error when get frame:" + ret.ToString());
                        return;
                    }
                }
            }
            else
            {
                Console.WriteLine("open capture file failed!");
            }
            NetmonAPI.NmCloseHandle(rawFrame);
            //NetmonAPI.NmApiClose();
        }
        public static string GetFramePayload(IntPtr RawFrame, uint TCPSrcOffset, uint TCPHeaderSize, uint paylen)
        {
            #region comm
            //string tempstring = string.Empty;
            //uint errno = 0;
            //byte[] result = null;

            //NM_NPL_PROPERTY_INFO propinfo = new NM_NPL_PROPERTY_INFO();
            //propinfo.Size = (ushort)System.Runtime.InteropServices.Marshal.SizeOf(propinfo);
            //errno = NetmonAPI.NmGetPropertyInfo(mFrameParser, mTCPPayLoadLengthID, ref propinfo);
            //if (errno != 0)
            //{
            //    Console.WriteLine("Error NmGetPropertyInfo Frame # error : " + errno.ToString());

            //}

            //byte[] val = new byte[propinfo.ValueSize];
            //uint retlen;
            //NmPropertyValueType vtype;
            //unsafe
            //{
            //    fixed (byte* pstr = val)
            //    {
            //        errno = NetmonAPI.NmGetPropertyById(mFrameParser, mTCPPayLoadLengthID, propinfo.ValueSize, pstr, out retlen, out vtype, 0, null);
            //    }
            //}

            //if (errno != 0)
            //{
            //    Console.WriteLine("Error NmGetPropertyById Frame" + errno.ToString());

            //}

            //uint paylen = (uint)val[0] + ((uint)val[1] << 8) + ((uint)val[2] << 16) + ((uint)val[3] << 24);

            //// Get the Data Offset, used to determine the TCP header size
            //byte TCPHeaderSize;
            //errno = NetmonAPI.NmGetFieldValueNumber8Bit(hParsedFrame, mTCPDataOffsetID, out TCPHeaderSize);
            //if (errno != 0)
            //{
            //    Console.WriteLine("Error NmGetFieldValueNumber8Bit Frame #error : " + errno.ToString());
            //}

            //// Get the Offset of TCP.SrcPort which is the first field in TCP.
            //uint TCPSrcOffset;
            //uint TCPSrcSize;
            //errno = NetmonAPI.NmGetFieldOffsetAndSize(hParsedFrame, mTCPSrcPortID, out TCPSrcOffset, out TCPSrcSize);
            //if (errno != 0)
            //{
            //    Console.WriteLine("Error NmGetFieldValueNumber8Bit Frame # error : " + errno.ToString());
            //}
            #endregion

            uint   retlen;
            uint   errno      = 0;
            byte[] result     = null;
            string tempstring = string.Empty;
            if (paylen > 0)
            {
                result = new byte[paylen];
                unsafe
                {
                    fixed(byte *pstr = result)
                    {
                        errno = NetmonAPI.NmGetPartialRawFrame(RawFrame, (uint)(TCPSrcOffset / 8 + TCPHeaderSize * 4), paylen, pstr, out retlen);
                        // errno = NetmonAPI.NmGetPartialRawFrame(RawFrame, (uint)(TCPSrcOffset / 8 ), paylen, pstr, out retlen);
                    }
                }

                if (errno != 0)
                {
                    Console.WriteLine("Error NmGetFieldValueNumber8Bit Frame #error : " + errno.ToString());
                    result = null;
                }
                else
                {
                    tempstring = Encoding.UTF8.GetString(result, 0, result.Length);
                }
            }
            else
            {
                retlen = 0;
            }

            return(tempstring);
        }
        /// <summary>
        /// Callback function for capture.
        /// </summary>
        /// <param name="hCapEngine"></param>
        /// <param name="adapterIndex"></param>
        /// <param name="callerContext"></param>
        /// <param name="hRawFrame"></param>
        private void CaptureCallBack(IntPtr hCapEngine, uint adapterIndex, IntPtr callerContext, IntPtr hRawFrame)
        {
            if (callerContext != IntPtr.Zero)
            {
                uint errno;

                unsafe
                {
                    uint frameLen = 0;

                    errno = NetmonAPI.NmGetRawFrameLength(hRawFrame, out frameLen);
                    if (errno != 0)
                    {
                        return;
                    }

                    byte[] frameBuf = new byte[CapturedFrameSize];

                    fixed(byte *pBuf = frameBuf)
                    {
                        if (frameLen >= CapturedFrameSize)
                        {
                            NM_TIME pTime = new NM_TIME();
                            //Get the TimeStamp of the frame for building the new shortened frame
                            errno = NetmonAPI.NmGetFrameTimeStampEx(hRawFrame, ref pTime);
                            if (errno != 0)
                            {
                                return;
                            }

                            uint captureSize = 0;
                            //use NmGetPartiaRawlFrame() to get the wanted length of the raw frame,
                            errno = NetmonAPI.NmGetPartialRawFrame(
                                hRawFrame,
                                0, //offset
                                CapturedFrameSize,
                                pBuf,
                                out captureSize
                                );
                            if (errno != 0)
                            {
                                return;
                            }

                            IntPtr hPartialRawFrame;
                            errno = NetmonAPI.NmBuildRawFrameFromBufferEx(
                                (IntPtr)pBuf,
                                CapturedFrameSize,
                                0, //media type, optional
                                ref pTime,
                                out hPartialRawFrame
                                );
                            if (errno != 0)
                            {
                                return;
                            }

                            NetmonAPI.NmAddFrame(callerContext, hPartialRawFrame);
                        }
                        else
                        {
                            NetmonAPI.NmAddFrame(callerContext, hRawFrame);
                        }
                    }
                }
            }
        }
Exemple #19
0
        public static void Main(string[] args)
        {
            // Load API
            try
            {
                initialized = Program.InitializeNMAPI();
            }
            catch (BadImageFormatException)
            {
                Console.WriteLine("There was an error loading the NMAPI.\n\nPlease ensure you have the correct version installed for your platform.");
            }
            catch (DllNotFoundException)
            {
                Console.WriteLine("There was an error loading the NMAPI DLL.\n\nPlease ensure you have Network Monitor 3.3 installed or try rebooting.");
            }

            CommandLineArguments commandReader = new CommandLineArguments();

            if (commandReader.ParseCommandLineArguments(args))
            {
                if (commandReader.IsNoArguments)
                {
                    Console.WriteLine(CommandLineArguments.GetUsage("ExpertExample"));
                }
                else if (commandReader.IsRequestingHelp)
                {
                    Console.WriteLine(CommandLineArguments.GetUsage("ExpertExample"));
                }
                else if (initialized)
                {
                    Console.WriteLine("Running Test Application with Arguments:");
                    Console.WriteLine("\tCapture File: " + commandReader.CaptureFileName);
                    Console.WriteLine("\tDisplay Filter: " + commandReader.DisplayFilter);
                    Console.WriteLine("\tConversation Filter: " + commandReader.ConversationFilter);
                    Console.WriteLine("\tSelected Frames: " + commandReader.SelectedFramesString);

                    Console.WriteLine();

                    bool loadedparserengine = false;

                    // Configure Parser Engine
                    uint   errno;
                    IntPtr hNplParser           = IntPtr.Zero;
                    IntPtr hFrameParserConfig   = IntPtr.Zero;
                    uint   conversationFilterId = 0;
                    uint   displayFilterId      = 0;
                    IntPtr hFrameParser         = IntPtr.Zero;

                    // Only load the parsing engine if we have to
                    if (!string.IsNullOrEmpty(commandReader.ConversationFilter) || !string.IsNullOrEmpty(commandReader.DisplayFilter))
                    {
                        Console.WriteLine("Loading Parser Engine...");

                        // Passing in null for the path will use the default configuration as specified in the Netmon UI
                        errno = NetmonAPI.NmLoadNplParser(null, NmNplParserLoadingOption.NmAppendRegisteredNplSets, pErrorCallBack, IntPtr.Zero, out hNplParser);
                        if (errno == ERROR_SUCCESS)
                        {
                            // Configure Frame Parser
                            errno = NetmonAPI.NmCreateFrameParserConfiguration(hNplParser, pErrorCallBack, IntPtr.Zero, out hFrameParserConfig);
                            if (errno == ERROR_SUCCESS)
                            {
                                // Enable Conversations
                                errno = NetmonAPI.NmConfigConversation(hFrameParserConfig, NmConversationConfigOption.None, true);
                                if (errno == ERROR_SUCCESS)
                                {
                                    // Add Filters
                                    if (!string.IsNullOrEmpty(commandReader.ConversationFilter))
                                    {
                                        Console.WriteLine("Adding Conversation Filter...");
                                        errno = NetmonAPI.NmAddFilter(hFrameParserConfig, commandReader.ConversationFilter, out conversationFilterId);
                                    }

                                    if (errno == ERROR_SUCCESS)
                                    {
                                        if (!string.IsNullOrEmpty(commandReader.DisplayFilter))
                                        {
                                            Console.WriteLine("Adding Display Filter...");
                                            errno = NetmonAPI.NmAddFilter(hFrameParserConfig, commandReader.DisplayFilter, out displayFilterId);
                                        }

                                        if (errno == ERROR_SUCCESS)
                                        {
                                            errno = NetmonAPI.NmCreateFrameParser(hFrameParserConfig, out hFrameParser, NmFrameParserOptimizeOption.ParserOptimizeNone);
                                            if (errno == ERROR_SUCCESS)
                                            {
                                                Console.WriteLine("Parser Engine Loaded Successfully!");
                                                Console.WriteLine();

                                                loadedparserengine = true;
                                            }
                                            else
                                            {
                                                Console.WriteLine("Parser Creation Error Number = " + errno);
                                            }
                                        }
                                        else
                                        {
                                            Console.WriteLine("Display Filter Creation Error Number = " + errno);
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("Conversation Filter Creation Error Number = " + errno);
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("Conversation Error Number = " + errno);
                                }

                                if (!loadedparserengine)
                                {
                                    NetmonAPI.NmCloseHandle(hFrameParserConfig);
                                }
                            }
                            else
                            {
                                Console.WriteLine("Parser Configuration Error Number = " + errno);
                            }

                            if (!loadedparserengine)
                            {
                                NetmonAPI.NmCloseHandle(hNplParser);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Error Loading NMAPI Parsing Engine Error Number = " + errno);
                        }
                    }

                    // Wait for confirmation
                    Console.WriteLine("Press any key to continue");
                    Console.ReadKey(true);

                    // Let's open the capture file
                    // Open Capture File
                    IntPtr captureFile = IntPtr.Zero;
                    errno = NetmonAPI.NmOpenCaptureFile(commandReader.CaptureFileName, out captureFile);
                    if (errno == ERROR_SUCCESS)
                    {
                        // Retrieve the number of frames in this capture file
                        uint frameCount;
                        errno = NetmonAPI.NmGetFrameCount(captureFile, out frameCount);
                        if (errno == ERROR_SUCCESS)
                        {
                            // Loop through capture file
                            for (uint ulFrameNumber = 0; ulFrameNumber < frameCount; ulFrameNumber++)
                            {
                                // Get the Raw Frame data
                                IntPtr hRawFrame = IntPtr.Zero;
                                errno = NetmonAPI.NmGetFrame(captureFile, ulFrameNumber, out hRawFrame);
                                if (errno != ERROR_SUCCESS)
                                {
                                    Console.WriteLine("Error Retrieving Frame #" + (ulFrameNumber + 1) + " from file");
                                    continue;
                                }

                                // Need to parse once to get similar results to the UI
                                if (loadedparserengine)
                                {
                                    // Parse Frame
                                    IntPtr phParsedFrame;
                                    IntPtr phInsertedRawFrame;
                                    errno = NetmonAPI.NmParseFrame(hFrameParser, hRawFrame, ulFrameNumber, NmFrameParsingOption.FieldDisplayStringRequired | NmFrameParsingOption.FieldFullNameRequired | NmFrameParsingOption.DataTypeNameRequired, out phParsedFrame, out phInsertedRawFrame);
                                    if (errno == ERROR_SUCCESS)
                                    {
                                        // Check against Filters
                                        if (!string.IsNullOrEmpty(commandReader.ConversationFilter))
                                        {
                                            bool passed;
                                            errno = NetmonAPI.NmEvaluateFilter(phParsedFrame, conversationFilterId, out passed);
                                            if (errno == ERROR_SUCCESS)
                                            {
                                                if (passed)
                                                {
                                                    if (!string.IsNullOrEmpty(commandReader.DisplayFilter))
                                                    {
                                                        bool passed2;
                                                        errno = NetmonAPI.NmEvaluateFilter(phParsedFrame, displayFilterId, out passed2);
                                                        if (errno == ERROR_SUCCESS)
                                                        {
                                                            if (passed2)
                                                            {
                                                                PrintParsedFrameInformation(phParsedFrame, ulFrameNumber, commandReader);
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        PrintParsedFrameInformation(phParsedFrame, ulFrameNumber, commandReader);
                                                    }
                                                }
                                            }
                                        }
                                        else if (!string.IsNullOrEmpty(commandReader.DisplayFilter))
                                        {
                                            bool passed;
                                            errno = NetmonAPI.NmEvaluateFilter(phParsedFrame, displayFilterId, out passed);
                                            if (errno == ERROR_SUCCESS)
                                            {
                                                if (passed)
                                                {
                                                    PrintParsedFrameInformation(phParsedFrame, ulFrameNumber, commandReader);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            PrintParsedFrameInformation(phParsedFrame, ulFrameNumber, commandReader);
                                        }

                                        NetmonAPI.NmCloseHandle(phInsertedRawFrame);
                                        NetmonAPI.NmCloseHandle(phParsedFrame);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Error Parsing Frame #" + (ulFrameNumber + 1) + " from file");
                                    }
                                }
                                else
                                {
                                    // Just print what I just deleted...
                                    uint pulLength;
                                    errno = NetmonAPI.NmGetRawFrameLength(hRawFrame, out pulLength);
                                    if (errno == ERROR_SUCCESS)
                                    {
                                        if (commandReader.IsSelected(ulFrameNumber))
                                        {
                                            Console.WriteLine("Frame #" + (ulFrameNumber + 1) + " (Selected) Frame Length(bytes): " + pulLength);
                                        }
                                        else
                                        {
                                            Console.WriteLine("Frame #" + (ulFrameNumber + 1) + " Frame Length(bytes): " + pulLength);
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("Error Getting Frame Length for Frame #" + (ulFrameNumber + 1));
                                    }
                                }

                                NetmonAPI.NmCloseHandle(hRawFrame);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Error Retrieving Capture File Length");
                        }

                        // Close Capture File to Cleanup
                        NetmonAPI.NmCloseHandle(captureFile);
                    }
                    else
                    {
                        Console.WriteLine("Could not open capture file: " + commandReader.CaptureFileName);
                        Console.WriteLine(CommandLineArguments.GetUsage("ExpertExample"));
                    }

                    if (loadedparserengine)
                    {
                        NetmonAPI.NmCloseHandle(hFrameParser);
                        NetmonAPI.NmCloseHandle(hFrameParserConfig);
                        NetmonAPI.NmCloseHandle(hNplParser);
                    }
                }
            }
            else
            {
                Console.WriteLine(commandReader.LastErrorMessage);
                Console.WriteLine(CommandLineArguments.GetUsage("ExpertExample"));
            }

            // Pause so we can see the results when launched from Network Monitor
            Console.WriteLine();
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();

            if (initialized)
            {
                CloseNMAPI();
            }
        }
Exemple #20
0
        /// <summary>
        /// Prints out a field's value if the display string couldn't be found.
        /// </summary>
        /// <param name="hParsedFrame">Parsed Frame</param>
        /// <param name="fieldId">Field Number to Display</param>
        private static void PrintParsedFrameFieldValue(IntPtr hParsedFrame, uint fieldId)
        {
            NmParsedFieldInfo parsedField = new NmParsedFieldInfo();

            parsedField.Size = (ushort)System.Runtime.InteropServices.Marshal.SizeOf(parsedField);

            uint errno = NetmonAPI.NmGetParsedFieldInfo(hParsedFrame, fieldId, parsedField.Size, ref parsedField);

            if (errno == ERROR_SUCCESS)
            {
                if (parsedField.NplDataTypeNameLength != 0)
                {
                    char[] name = new char[BUFFER_SIZE];
                    unsafe
                    {
                        fixed(char *pstr = name)
                        {
                            errno = NetmonAPI.NmGetFieldName(hParsedFrame, fieldId, NmParsedFieldNames.DataTypeName, BUFFER_SIZE, pstr);
                        }
                    }

                    Console.Write("(" + new string(name).Replace("\0", string.Empty) + ") ");
                }

                if (parsedField.FieldBitLength > 0)
                {
                    byte   number8Bit  = 0;
                    ushort number16Bit = 0;
                    uint   number32Bit = 0;
                    ulong  number64Bit = 0;
                    ulong  rl          = parsedField.ValueBufferLength;

                    switch (parsedField.ValueType)
                    {
                    case FieldType.VT_UI1:
                        errno = NetmonAPI.NmGetFieldValueNumber8Bit(hParsedFrame, fieldId, out number8Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine(number8Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_I1:
                        errno = NetmonAPI.NmGetFieldValueNumber8Bit(hParsedFrame, fieldId, out number8Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine((sbyte)number8Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_UI2:
                        errno = NetmonAPI.NmGetFieldValueNumber16Bit(hParsedFrame, fieldId, out number16Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine(number16Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_I2:
                        errno = NetmonAPI.NmGetFieldValueNumber16Bit(hParsedFrame, fieldId, out number16Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine((short)number16Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_UI4:
                        errno = NetmonAPI.NmGetFieldValueNumber32Bit(hParsedFrame, fieldId, out number32Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine(number32Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_I4:
                        errno = NetmonAPI.NmGetFieldValueNumber32Bit(hParsedFrame, fieldId, out number32Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine((int)number32Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_UI8:
                        errno = NetmonAPI.NmGetFieldValueNumber64Bit(hParsedFrame, fieldId, out number64Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine(number64Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_I8:
                        errno = NetmonAPI.NmGetFieldValueNumber64Bit(hParsedFrame, fieldId, out number64Bit);
                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine((long)number64Bit);
                        }
                        else
                        {
                            Console.WriteLine("Error " + errno);
                        }

                        break;

                    case FieldType.VT_ARRAY | FieldType.VT_UI1:
                        byte[] byteArray = new byte[BUFFER_SIZE];
                        unsafe
                        {
                            fixed(byte *barr = byteArray)
                            {
                                errno = NetmonAPI.NmGetFieldValueByteArray(hParsedFrame, fieldId, BUFFER_SIZE, barr, out number32Bit);
                            }
                        }

                        if (errno == ERROR_SUCCESS)
                        {
                            for (uint i = 0; i < number32Bit; i++)
                            {
                                Console.Write(byteArray[i].ToString("X2") + " ");
                            }

                            if ((parsedField.FieldBitLength >> 3) > number32Bit)
                            {
                                Console.Write(" ... " + ((parsedField.FieldBitLength >> 3) - number32Bit) + " more bytes not displayed");
                            }

                            Console.WriteLine();
                        }
                        else if (errno == ERROR_RESOURCE_NOT_AVAILABLE)
                        {
                            Console.WriteLine("The field is a container");
                        }

                        break;

                    case FieldType.VT_LPWSTR:
                        char[] name = new char[BUFFER_SIZE];
                        unsafe
                        {
                            fixed(char *pstr = name)
                            {
                                errno = NetmonAPI.NmGetFieldValueString(hParsedFrame, fieldId, BUFFER_SIZE, pstr);
                            }
                        }

                        if (errno == ERROR_SUCCESS)
                        {
                            Console.WriteLine(new string(name).Replace("\0", string.Empty));
                        }
                        else
                        {
                            Console.WriteLine("String is too long to display");
                        }

                        break;

                    case FieldType.VT_LPSTR:
                        Console.WriteLine("Should not occur");
                        break;

                    case FieldType.VT_EMPTY:
                        Console.WriteLine("Struct or Array types expect description");
                        break;

                    default:
                        Console.WriteLine("Unknown Type " + parsedField.ValueType);
                        break;
                    }
                }
                else
                {
                    Console.WriteLine("Empty");
                }
            }
            else
            {
                Console.WriteLine("Could Not Retrieve Parsed Field Info " + errno);
            }
        }
Exemple #21
0
        /// <summary>
        /// Used to ask and then print out extended information about a specific frame
        /// </summary>
        /// <param name="hParsedFrame">Parsed Frame</param>
        /// <param name="frameNumber">Frame Number to Display</param>
        /// <param name="command">Command Line Parameters</param>
        private static void PrintParsedFrameInformation(IntPtr hParsedFrame, uint frameNumber, CommandLineArguments command)
        {
            uint   errno;
            uint   ulFieldCount;
            string ds = "Frame #" + (frameNumber + 1);

            // Is Selected
            if (command.IsSelected(frameNumber))
            {
                ds += " (Selected)";
            }

            // Get Frame Timestamp
            ulong timestamp;

            errno = NetmonAPI.NmGetFrameTimeStamp(hParsedFrame, out timestamp);
            if (errno == ERROR_SUCCESS)
            {
                ds += " " + DateTime.FromFileTimeUtc((long)timestamp).ToString();
            }
            else
            {
                ds += " Timestamp Couldn't be Retrieved.";
            }

            Console.WriteLine(ds);
            Console.Write("Print Frame Info? (y/n) ");

            char key = Console.ReadKey().KeyChar;

            Console.WriteLine();

            if (key == 'y' || key == 'Y')
            {
                errno = NetmonAPI.NmGetFieldCount(hParsedFrame, out ulFieldCount);

                for (uint fid = 0; fid < ulFieldCount; fid++)
                {
                    // Get Field Name
                    char[] name = new char[BUFFER_SIZE * 2];
                    unsafe
                    {
                        fixed(char *pstr = name)
                        {
                            errno = NetmonAPI.NmGetFieldName(hParsedFrame, fid, NmParsedFieldNames.NamePath, BUFFER_SIZE * 2, pstr);
                        }
                    }

                    if (errno == ERROR_SUCCESS)
                    {
                        Console.Write(new string(name).Replace("\0", string.Empty) + ": ");
                    }
                    else
                    {
                        Console.WriteLine("Error Retrieving Field, NmGetFieldName Returned: " + errno);
                        continue;
                    }

                    // Get Field Value as displayed in Netmon UI
                    name = new char[BUFFER_SIZE];
                    unsafe
                    {
                        fixed(char *pstr = name)
                        {
                            errno = NetmonAPI.NmGetFieldName(hParsedFrame, fid, NmParsedFieldNames.FieldDisplayString, BUFFER_SIZE, pstr);
                        }
                    }

                    if (errno == ERROR_SUCCESS)
                    {
                        Console.WriteLine(new string(name).Replace("\0", string.Empty));
                    }
                    else if (errno == ERROR_NOT_FOUND)
                    {
                        Program.PrintParsedFrameFieldValue(hParsedFrame, fid);
                    }
                    else
                    {
                        Console.WriteLine("Error Retrieving Value, NmGetFieldName Returned: " + errno);
                        continue;
                    }
                }

                Console.WriteLine();
            }
        }
        public void Test()
        {
            bool             isElevated;
            WindowsIdentity  identity  = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(identity);

            isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);

            Console.WriteLine($"Elevated permissions: {isElevated}");


            capHandler = new CaptureCallbackDelegate(CapHandlerCallback);
            uint ret;

            IntPtr myCapEng;

            ret = NetmonAPI.NmOpenCaptureEngine(out myCapEng);
            if (ret != 0)
            {
                Console.WriteLine("Error {0}\n", ret);
            }
            else
            {
                uint AdptCount;
                ret = NetmonAPI.NmGetAdapterCount(myCapEng, out AdptCount);
                if (ret != 0)
                {
                    NetmonAPI.NmCloseHandle(myCapEng);
                    Console.WriteLine("Error {0}\n", ret);
                }
                else
                {
                    // Creates a capture file which will store the last 10MB of traffic captured
                    ret = NetmonAPI.NmCreateCaptureFile(this.filename, 10000000, NmCaptureFileFlag.WrapAround, out this.capFile, out this.size);

                    if (ret != 0)
                    {
                        Console.Write("Error Creating File");
                    }

                    Console.WriteLine($"Adapters avalable: {AdptCount}");
                    for (uint i = 0; i < AdptCount; i++)
                    {
                        ret = NetmonAPI.NmConfigAdapter(myCapEng, i, capHandler, IntPtr.Zero, NmCaptureCallbackExitMode.ReturnRemainFrames);
                        if (ret != 0)
                        {
                            Console.WriteLine("Could not config {0}, error {1}", i, ret);
                        }
                        else
                        {
                            Console.WriteLine("Configured Adpt {0}", i);
                        }

                        ret = NetmonAPI.NmStartCapture(myCapEng, i, NmCaptureMode.Promiscuous);
                        if (ret != 0)
                        {
                            Console.WriteLine("Could not Start Capture on {0}, error {1}", i, ret);
                        }
                        else
                        {
                            Console.WriteLine("Started Adpt {0}", i);
                        }
                    }

                    System.Threading.Thread.Sleep(5000);

                    for (uint i = 0; i < AdptCount; i++)
                    {
                        ret = NetmonAPI.NmConfigAdapter(myCapEng, i, capHandler, IntPtr.Zero, NmCaptureCallbackExitMode.ReturnRemainFrames);
                        if (ret != 0)
                        {
                            Console.WriteLine("Could not config {0}, error {1}", i, ret);
                        }
                        else
                        {
                            Console.WriteLine("Configured Adpt {0}", i);
                        }
                        Console.WriteLine("Starting Adpt {0} again", i);

                        ret = NetmonAPI.NmStartCapture(myCapEng, i, NmCaptureMode.Promiscuous);
                        if (ret != 0)
                        {
                            Console.WriteLine("Could not Start Capture again on {0}, error {1}", i, ret);
                        }
                        else
                        {
                            Console.WriteLine("Started Adpt {0} again", i);
                        }
                    }

                    for (uint i = 0; i < AdptCount; i++)
                    {
                        ret = NetmonAPI.NmStopCapture(myCapEng, i);
                        if (ret != 0)
                        {
                            Console.WriteLine("Could not Stop Capture on {0}, error {1}", i, ret);
                        }
                        else
                        {
                            Console.WriteLine("Stopped Adpt {0}", i);
                        }
                    }
                }

                NetmonAPI.NmCloseHandle(myCapEng);
            }
        }
Exemple #23
0
        public NetmonCaptureFile(string file)
        {
            NetmonAPI.NmOpenCaptureFile(file, out _fileHandle);

            NetmonAPI.NmGetFrameCount(this.Handle, out frameCount);
        }
Exemple #24
0
        static void Main(string[] args)
        {
            // / / Initialize NetworkMonitor API

            NM_API_CONFIGURATION apiConfig = new NM_API_CONFIGURATION();

            apiConfig.Size = (ushort)(System.Runtime.InteropServices.Marshal.SizeOf(apiConfig));
            NetmonAPI.NmGetApiConfiguration(ref apiConfig);
            apiConfig.ThreadingMode = 0;
            NetmonAPI.NmApiInitialize(ref apiConfig);

            IntPtr nplPointer = IntPtr.Zero;

            NetmonAPI.NmLoadNplParser(null, NmNplParserLoadingOption.NmAppendRegisteredNplSets, pErrorCallBack, IntPtr.Zero, out nplPointer);


            // / / Initialize Frame parser
            IntPtr parserConfigPointer;

            NetmonAPI.NmCreateFrameParserConfiguration(nplPointer, pErrorCallBack, IntPtr.Zero, out parserConfigPointer);

            NetmonAPI.NmConfigConversation(parserConfigPointer, NmConversationConfigOption.None, true);

            IntPtr ParserPointer;

            NetmonAPI.NmCreateFrameParser(parserConfigPointer, out ParserPointer, NmFrameParserOptimizeOption.ParserOptimizeNone);


            // / / Parse capture file
            IntPtr captureFileHandle;

            NetmonAPI.NmOpenCaptureFile("auto.cap", out captureFileHandle);

            uint rawFrameCount;

            NetmonAPI.NmGetFrameCount(captureFileHandle, out rawFrameCount);

            uint   frameNumber = 0;
            IntPtr rawFrame;

            NetmonAPI.NmGetFrame(captureFileHandle, frameNumber, out rawFrame);

            IntPtr parsedFrame;
            IntPtr insRawFrame;

            NetmonAPI.NmParseFrame(ParserPointer, rawFrame, frameNumber, NmFrameParsingOption.FieldDisplayStringRequired | NmFrameParsingOption.FieldFullNameRequired | NmFrameParsingOption.DataTypeNameRequired, out parsedFrame, out insRawFrame);

            uint fieldCount;

            NetmonAPI.NmGetFieldCount(parsedFrame, out fieldCount);

            uint BUFFER_SIZE = 1024;

            char[] name = new char[BUFFER_SIZE * 2];
            unsafe
            {
                fixed(char *pstr = name)
                {
                    NetmonAPI.NmGetFieldName(parsedFrame, 0, NmParsedFieldNames.NamePath, BUFFER_SIZE * 2, pstr);
                }
            }

            String fieldName = new String(name).Replace("\0", String.Empty);

            NetmonAPI.NmCloseHandle(captureFileHandle);
        }
Exemple #25
0
 private NetmonNplParser()
 {
     _ret = NetmonAPI.NmLoadNplParser(null, NmNplParserLoadingOption.NmAppendRegisteredNplSets, pErrorCallBack, IntPtr.Zero,
                                      out _handle);
 }