C#的RawSocket实现网络封包监视

作者:hifrog  来自:网络  

本文向大家介绍Windows Sockets的一些关于用C#实现的原始套接字(Raw Socket)的编程,以及在此基础上实现的网络封包监视技术。同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。

   在本文例子中,我在nbyte.BasicClass命名空间实现了RawSocket类,它包含了我们实现数据包监视的核心技术。在实现这个类之前,需要先写一个IP头结构,来暂时存放一些有关网络封包的信息:
 
      [StructLayout(LayoutKind.Explicit)]

      public struct IPHeader

      {

        [FieldOffset(0)] public byte ip_verlen; //I4位首部长度 4位IP版本号

        [FieldOffset(1)] public byte ip_tos; //8位服务类型TOS

        [FieldOffset(2)] public ushort ip_totallength; //16位数据包总长度(字节)

        [FieldOffset(4)] public ushort ip_id; //16位标识

        [FieldOffset(6)] public ushort ip_offset; //3位标志位

        [FieldOffset(8)] public byte ip_ttl; //8位生存时间 TTL

        [FieldOffset(9)] public byte ip_protocol; //8位协议(TCP, UDP, ICMP, Etc.)

        [FieldOffset(10)] public ushort ip_checksum; //16位IP首部校验和

        [FieldOffset(12)] public uint ip_srcaddr; //32位源IP地址

        [FieldOffset(16)] public uint ip_destaddr; //32位目的IP地址

      }

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

C#中读取数据库中Image数据  MSDN访谈录之C#编程一
VisualStudio.Net内幕(2)  数据结构中用C#实现“表达式计算”
C#语言初级入门(4)  C#InnerClassvs.java的innerclass比较
用C#实现语音技术  c#中对文件的操作小结
C#版MVC框架PureMVC的深入分析和改良方案  程序实现更换IP(C#)
Visual C# 3.0 新特性概览 (二)  NET连接池救生员
通过.NETFramework访问活动目录(1)  VisualC#编写实现POP3的程序
C# 或Asp.Net 将excel表格导入数据库  VisualC#中的MDI编程
在C#中使用COM 实现事务控制  如何使用C#调用非托管DLL函数
用VisualC#调用WindowsAPI函数  .Net 2.0 DataGridView中键盘事件处理方法