コード例 #1
0
 internal static extern int pcap_next_ex(PcapHandle p, ref pcap_pkthdr header, ref IntPtr dataPtr);
コード例 #2
0
ファイル: PacketReader.cs プロジェクト: spladug/PacketCapture
        private Packet ReadPacketWithoutBusyCheck()
        {
            ThrowIfDisposed();

            while (true)
            {
                var header = new pcap_pkthdr();
                var dataPtr = IntPtr.Zero;

                int result = NativeMethods.pcap_next_ex(handle, ref header, ref dataPtr);

                // throw on error
                if (result == ReturnValue.Error)
                    handle.ThrowLastError();

                // check for EOF
                if (result == ReturnValue.EOF)
                    return null;

                // try again on timeout
                if (result == 0)
                    continue;

                var buffer = new byte[header.DataLength];
                Marshal.Copy(dataPtr, buffer, 0, header.DataLength);

                return new Packet {
                    Data = buffer,
                    NativeTimestamp = header.Timestamp,
                    LinkLayerType = linkLayerType,
                };
            }
        }
コード例 #3
0
 internal static extern void pcap_dump(PcapDumperHandle p, pcap_pkthdr header, byte[] data);