Click here to Skip to main content
Licence GPL3
First Posted 27 May 2003
Views 312,036
Downloads 6,350
Bookmarked 131 times

Packet Sniffing with Winpcap Functions Ported to a .NET Library

By | 25 Mar 2009 | Article
Using Winpcap functions in the .NET Framework
Sample Image - dotnetwinpcap.jpg

Introduction

Winpcap has been the de facto library in packet capture applications, but the problem is that it is only natively available for C++ and C.

This is an attempt to port some of the crucial Winpcap functions for the .NET environment. The demonstration project here is written in C#.

First of all, you need to install Winpcap from winpcap's Web site and then extract the project zip file. Be sure to reference dotnetwinpcap.dll in the project if not already so.

Methods Available

  • static ArrayList FindAllDevs()

    Returns an ArrayList of Device objects, each describing an Ethernet interface on the system.

  • bool Open(string source, int snaplen, int flags, int read_timeout)

    Opens an Ethernet interface with source as the name of the interface obtained from a Device object, snaplen is the max number of bytes to be captured from each packet, flags=1 means promiscuous mode, read_timeout is the blocking time of ReadNext before it returns.

  • PCAP_NEXT_EX_STATE ReadNext( out PacketHeader p, out byte[] packet_data)

    Reads a next packet and return the packet details (size and timestamp) to object p, and packet raw data in packet_data (array of bytes).

  • void StopDump()

    Stops dumping of capture data to a file.

  • bool StartDump(string filename) 

    Starts dumping of capture data to a file.

  • bool SetMinToCopy(int size)

    Sets the minimum number of bytes required to be received by the driver before OnReceivePacket fires. Lowering this can increase response time, but increases system calls which lowers program efficiency.

  • bool SetKernelBuffer(int bytes)

    Sets the number of bytes in the driver kernel buffer for packet capture. Increase this to avoid packet loss and improve performance. Default is 1 MB.

  • void StartListen()

    Starts listening for packets.

  • void StopListen()

    Stops listening for packets.

  • void Close()

    Stops all operations and releases all resources.

  • bool SendPacket(byte[] rawdata)

    Sends bytes contained in rawdata over the wire. The ethernet checksum will be automatically added prior to sending the packet. Returns true if send is successful, false otherwise.

Properties

  • bool IsListening

    true if the dotnetWinpcap object is listening, false otherwise.

  • string LastError

    Returns the last error encountered by the library, if any.

Event Support

delegate void ReceivePacket (object sender, PacketHeader p, byte[] s);
event ReceivePacket OnReceivePacket;

Once StartListen() is called, OnReceivePacket will start to fire on every packet encountered, until StopListen() is called, or Close() is called.

Delegate objects of the above signature may be attached to the OnReceivePacket event to receive notification and perform further processing, as demonstrated in the demo source code.

History

  • 28th May, 2003: Initial post
  • 25th Aug 2003 - Updated source code
  • 28th June, 2008: Updated source code
  • 24th March, 2009: Updated source code to include client code as requested by Ashin

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)

About the Author

Victor Tan



Australia Australia

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
AnswerRe: get the content? Pinmemberdennis02063:51 1 Nov '06  
Generalread a file.acp PinmemberDanieleBianchi5:55 21 Sep '06  
QuestionHow to get the payload of packet PinmemberAmol pathak20:16 17 Sep '06  
QuestionI need codes in JAVA in order to read, save and use Packets captured from VoIP traffic?? (UDP) Pinmemberandre_toro9:28 9 Aug '06  
Questiondotnetwinpcap.dll ??? Pinmemberpgr_home9:08 2 Aug '06  
GeneralNo packet data! PinmemberLady-green21:52 27 May '06  
GeneralRe: No packet data! Pinmemberspeedofspin5:31 19 Jul '06  
The setmintocopy value means that winpcap will buffer packets up to this amount before firing. IF you want near real time response set it to something like 64. 1 is a bit low and will result in unncessary system calls.
GeneralMore detail on needed changes in order to capture all of the traffic Pinmembermobiledeveloper516:10 7 Jan '10  
GeneralDo Not Decompile Pinmemberpunkbuster6:06 9 Feb '06  
GeneralAssembling packets Pinmembervetris11121:16 31 Jan '06  
GeneralUpdated Version PinmemberShawn M Lewis15:12 24 Nov '05  
GeneralRe: Updated Version Pinmemberdjaxl10:16 24 Jan '06  
GeneralMail me the source code pls Pinmembernunomag20:07 28 Oct '05  
GeneralRe: Mail me the source code pls PinmemberHamid Qureshi16:59 30 Oct '05  
GeneralRe: Mail me the source code pls Pinmemberdjaxl10:14 24 Jan '06  
GeneralRe: Mail me the source code pls Pinmembernunomag23:35 24 Jan '06  
GeneralRe: Mail me the source code pls Pinmemberpunkbuster11:55 6 Feb '06  
GeneralRe: Mail me the source code pls Pinmemberranchu panchu19:16 17 Jun '07  
Questiondotnetwinpcap? Pinmemberbujia23:31 3 Oct '05  
Generaldissecting IP packets in c# Pinmemberjose1705835:38 14 Sep '05  
Question17how to write an IDS? Pinmemberperfume13:05 12 Aug '05  
QuestionContinue Project? Pinmembereugenevd3:39 1 Aug '05  
AnswerRe: Continue Project? Pinmemberwindrago20:26 26 Feb '06  
QuestionCommercial use? Pinmemberlinevty049:44 22 Jul '05  
GeneralMilliseconds Pinmemberskipi836:41 16 Jun '05  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120529.1 | Last Updated 25 Mar 2009
Article Copyright 2003 by Victor Tan
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid