Sniffer-Programmierung unter WIN mit C/C++

Gibt es eine C/C++ API in WIN32, mit der man einen sniffer für Ethernet-Netzwerke programmieren kann? Es sollen Ethernet-Packete ausgelesen werden unabhängig von der Source Addresse und dem verwendeten Protokoll. Muss ich dazu einen VXD schreiben?