C# 捕获流经USB调制解调器的网络数据
我试图同时从多个接口捕获网络数据包。我可以用下面提到的代码来实现这一点,但如果我连接了USB调制解调器,则在选择该IP时会出现异常。异常来自行C# 捕获流经USB调制解调器的网络数据,c#,sockets,packet-capture,packet-sniffers,C#,Sockets,Packet Capture,Packet Sniffers,我试图同时从多个接口捕获网络数据包。我可以用下面提到的代码来实现这一点,但如果我连接了USB调制解调器,则在选择该IP时会出现异常。异常来自行mainSocket.IOControl(IOControlCode.ReceiveAll、byTrue、byOut) 例外是 “引用的对象类型不支持尝试的操作。” 确切的例外是什么?它有内部异常吗?@rene抱歉,我是新来的,不管怎样,我编辑了问题并添加了异常是吗?如果是,您还可以添加错误代码、NativeErrorcode和SocketErrorcod
mainSocket.IOControl(IOControlCode.ReceiveAll、byTrue、byOut)
例外是
“引用的对象类型不支持尝试的操作。”
确切的例外是什么?它有内部异常吗?@rene抱歉,我是新来的,不管怎样,我编辑了问题并添加了异常是吗?如果是,您还可以添加错误代码、NativeErrorcode和SocketErrorcode。您是否尝试不在线程内运行此代码?@rene这是一个SocketException。代码被删除。@rene在对该行代码使用try-catch之后,我可以看到异常之后捕获的数据。不知道为什么?
class SetIp
{
private Socket mainSocket;
private byte[] byteData = new byte[4096];
public void setIP(IPAddress add)
{
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
mainSocket.Bind(new IPEndPoint(add, 0));
mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
Thread MyThread = new Thread(new ThreadStart(() =>
{
while (true)
{
byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
byte[] byOut = new byte[4] { 1, 0, 0, 0 }; //Capture outgoing packets
mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);
mainSocket.Receive(byteData, 0, byteData.Length, SocketFlags.None);
ParseData(byteData, byteData.Length);
}
}));
MyThread.Start();
}