私はC Sharp
Winpcap を使用してパケット スニファに取り組んでいます。正確なコードは次のとおりです。
[DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern IntPtr pcap_open(char[] devicename, int size, int mode, int timeout, ref IntPtr auth, ref IntPtr errbuf);
string devicename = "\\Device\\NPF_{EADB4C21-B0AF-4EF2-86AB-80A37F399D1C}";
IntPtr errbuf = IntPtr.Zero, auth = IntPtr.Zero, iface;
try
{
iface = pcap_open(devicename.ToCharArray(), 65536, 1, 1000, ref auth, ref errbuf);
}
catch (Exception er) { return; }
pcap_open は、ネットワーク インターフェイスへの有効なポインタを常に返すとは限りません。NULL
(0)を返すこともあります。以前は「PInvoke がスタックの不均衡を検出しました...」と表示されていましたが、呼び出し規約を変更して修正しました。char
used indevicename
が 1 byteであることも確認しました(charset ansi)
。それでも何かがうまくいかない。
単なる観察:デバッグするたびに、常に有効なポインターが返されますが、そうでない場合は、NULL
40% の確率で返されます。
私はすべてをチェックインしてチェックアウトし、たくさんグーグルで調べましたが、何もわかりませんでした。何が欠けている可能性がありますか?最悪の部分は、例外をキャッチして適切に処理することさえできないことです。誰か答えがありますか?