【发布时间】:2011-09-03 01:13:48
【问题描述】:
我正在使用 Winpcap 在C Sharp 中进行数据包嗅探器,这是确切的代码:
[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 检测到堆栈不平衡...”,我通过更改调用约定更正了这一点。我什至确保devicename 中使用的char 是1 字节(charset ansi)。还是有问题。
只是一个观察:每当我调试它时,它总是返回一个有效的指针,但当我不这样做时,它会返回 NULL 40% 的时间。
我已经检查了所有内容,用谷歌搜索了很多,但无法弄清楚任何事情。可能缺少什么? 最糟糕的是,我什至无法捕捉到异常来正确处理它。有人有答案吗?
【问题讨论】:
标签: c# c++ stack-overflow winpcap