[求助]原始套接字监听IP数据包
1. 用异步方式监听IP数据包
//-------------------------------------------------------------------------------------------------------------
以上代码是可以正常运行的
。
。
。
然后,我把[color=#FFFF00]socket.Blocking=false;注释掉,改成用同步方式来Receive()侦听接收,程序就无法接收到数据包了,原始套接字不能用同步方式来接收数据包么?
[/color]
public class SniffSocket
{
private Socket socket;
private byte[] receiveBufferBytes;
private int receiveBufferLength;
private bool keepRunning = true;
private SniffSocket()
{
receiveBufferLength = 4096;
receiveBufferBytes = new byte[receiveBufferLength];
socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
socket.Blocking = false;
socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.100"), 0));
}
public void Run()
{
//Socket开始异步监听数据包,并利用委托AsyncCallback
//在相应异步操作完成时调用CallReceive方法进行处理。
IAsyncResult ar = socket.BeginReceive(receiveBufferBytes, 0,
receiveBufferLength, SocketFlags.None,
new AsyncCallback(CallReceive), this);
}
private void CallReceive(IAsyncResult ar)
{
int receivedBytes;
receivedBytes = socket.EndReceive(ar);//结束挂起的异步读取
Receive(receiveBufferBytes, receivedBytes);//解析接收的数据包
if (keepRunning) Run();//继续侦听
}
private void Receive(byte[] buf, int len)
{
//解析接收到的数据包
}
}
//-------------------------------------------------------------------------------------------------------------
以上代码是可以正常运行的
。
。
。
然后,我把[color=#FFFF00]socket.Blocking=false;注释掉,改成用同步方式来Receive()侦听接收,程序就无法接收到数据包了,原始套接字不能用同步方式来接收数据包么?
[/color]
...全文
相关推荐
基于winsock原始套接字的IP数据包的捕获与解析
原始套接字可以用来捕获和解析网络数据包,实现网络嗅探和协议分析等功能。IP数据包捕获在本设计中,我们使用原始套接字来捕获IP数据包。
MAC帧数据包的接收示例(原始套接字)
测试MAC帧数据包使用的传输协议 1 #include <stdio.h> 2 #include <sys/socket.h> 3 #include <stdlib.h> 4 #include <arpa/inet.h> 5 #include <unistd.h> 6 #include <netinet/if...
解析IP数据包(设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题)
该项目实现了一个基于原始套接字的IP数据包解析程序,能够捕获并解析IPv4数据包的头部信息,包括版本、首部长度、总长度、TTL和协议类型等字段。程序支持混杂模式抓包,可将结果输出至屏幕或日志文件,并具
IP数据包的捕获与解析
该项目是一个基于WinSock的控制台应用程序,通过原始套接字实现IP层数据包的捕获与解析。程序使用RAW socket监听网络流量,支持手动构造IP头部,并获取本地主机名和IP地址进行绑定。适用于网
原始套接字生成IP数据包
本文介绍了如何使用Winsock2进行网络编程,重点展示了如何构造并发送IP数据包。代码包含初始化Winsock库、创建原始套接字、设置IP头部信息及发送数据的过程。


