首页 > 代码库 > C#之Raw Socket网络封包监视源码

C#之Raw Socket网络封包监视源码

大家可以建立一个Windows Form应用程序,在下面的各个文件中添加对应的源码

 

//RawSocket.cs
namespace ReceiveAll
{
 using System;
 using System.Net;
 using System.Net.Sockets;
 using System.Runtime.InteropServices;
 using System.Windows.Forms;
 
 [StructLayout(LayoutKind.Explicit)]
 public struct IPHeader
 {
  [FieldOffset(0)] public byte    ip_verlen;
  [FieldOffset(1)] public byte    ip_tos;
  [FieldOffset(2)] public ushort  ip_totallength;
  [FieldOffset(4)] public ushort  ip_id;
  [FieldOffset(6)] public ushort  ip_offset;
  [FieldOffset(8)] public byte    ip_ttl;
  [FieldOffset(9)] public byte    ip_protocol;
  [FieldOffset(10)] public ushort ip_checksum;
  [FieldOffset(12)] public uint   ip_srcaddr;
  [FieldOffset(16)] public uint   ip_destaddr;
 }

 

 

 

 public class RawSocket
 {
  private bool error_occurred;//是否产生错误
  public bool KeepRunning;//是否继续进行
  private static int len_receive_buf;//得到的数据流的长度
  byte [] receive_buf_bytes;//收到的字节
  private Socket socket = null; //声明套接字
  const int SIO_R = unchecked((int)0x98000001);
  const int SIO_1=unchecked((int)0x98000002);
  const int SIO_2=unchecked((int)0x98000003);
  public RawSocket()//构造函数
  {
   error_occurred=false;
   len_receive_buf = 4096;
   receive_buf_bytes = new byte[len_receive_buf];
  }
  
  public void CreateAndBindSocket(string IP)//建立并绑定套接字
  {
   socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
   socket.Blocking = false;//置socket非阻塞状态
   socket.Bind(new IPEndPoint(IPAddress.Parse(IP), 0));

   if (SetSocketOption()==false) error_occurred=true;
  }

  public void Shutdown()
  {
   if(socket != null)
   {
    socket.Shutdown(SocketShutdown.Both);
    socket.Close();
   }
  }

  private bool SetSocketOption()
  {
   bool ret_value = http://www.mamicode.com/true;
   try
   {
    socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
    
    byte []IN = new byte[4]{1, 0, 0, 0};
    byte []OUT = new byte[4];  
    int ret_code = socket.IOControl(SIO_R, IN, OUT);//低级别操作模式
    ret_code = OUT[0] + OUT[1] + OUT[2] + OUT[3];//把4个8位字节合成一个32位整数
    System.Windows.Forms.MessageBox.Show(ret_code.ToString());
    if(ret_code != 0) ret_value = http://www.mamicode.com/false;
   }
   catch(SocketException)
   {
    ret_value = http://www.mamicode.com/false;
   }
   return ret_value;
  }

  public bool ErrorOccurred
  {
   get
   {
    return error_occurred;
   }
  }
//解析接收的数据包,形成PacketArrivedEventArgs时间数据类对象,并引发PacketArrival事件
  unsafe private void Receive(byte [] buf, int len)
  {
   byte temp_protocol=0;
   uint temp_version=0;
   uint temp_ip_srcaddr=0;
   uint temp_ip_destaddr=0;
   short temp_srcport=0;
   short temp_dstport=0;
   IPAddress temp_ip;

   //return;

   PacketArrivedEventArgs e=new PacketArrivedEventArgs();

   fixed(byte *fixed_buf = buf)
   {
    IPHeader * head = (IPHeader *) fixed_buf;
    e.HeaderLength=(uint)(head->ip_verlen & 0x0F) << 2;
    
    temp_protocol = head->ip_protocol;
    switch(temp_protocol)
    {
     case 1: e.Protocol="ICMP:";     break;
     case 2: e.Protocol="IGMP:";     break;
     case 6: e.Protocol="TCP:";      break;
     case 17: e.Protocol="UDP:";     break;
     default: e.Protocol= "UNKNOWN"; break;
    }

    temp_version =(uint)(head->ip_verlen & 0xF0) >> 4;
    e.IPVersion = temp_version.ToString();

    temp_ip_srcaddr = head->ip_srcaddr;
    temp_ip_destaddr = head->ip_destaddr;
    temp_ip = new IPAddress(temp_ip_srcaddr);
    e.OriginationAddress =temp_ip.ToString();
    temp_ip = new IPAddress(temp_ip_destaddr);
    e.DestinationAddress = temp_ip.ToString();

    temp_srcport = *(short *)&fixed_buf[e.HeaderLength];
    temp_dstport = *(short *)&fixed_buf[e.HeaderLength+2];
    e.OriginationPort=IPAddress.NetworkToHostOrder(temp_srcport).ToString();
    e.DestinationPort=IPAddress.NetworkToHostOrder(temp_dstport).ToString();
   // if(e.DestinationAddress!="211.87.212.116"||int.Parse(e.DestinationPort)>1000)
   // {
   //  return;
   // }
    e.PacketLength =(uint)len;
    e.MessageLength =(uint)len - e.HeaderLength;

    e.ReceiveBuffer=buf;
    //把buf中的IP头赋给PacketArrivedEventArgs中的IPHeaderBuffer
    Array.Copy(buf,0,e.IPHeaderBuffer,0,(int)e.HeaderLength);
    //把buf中的包中内容赋给PacketArrivedEventArgs中的MessageBuffer
    Array.Copy(buf,(int)e.HeaderLength,e.MessageBuffer,0,(int)e.MessageLength);
   }
   //引发PacketArrival事件
   OnPacketArrival(e);
  }
 
  public void Run()
  {
   IAsyncResult ar = socket.BeginReceive(receive_buf_bytes, 0, len_receive_buf, SocketFlags.None, new AsyncCallback(CallReceive), this);
  }

  private void CallReceive(IAsyncResult ar)
  {
   int received_bytes;
   received_bytes = socket.EndReceive(ar);
   Receive(receive_buf_bytes, received_bytes);
   if (KeepRunning) Run();
  }

  public class PacketArrivedEventArgs : EventArgs
  {
   public PacketArrivedEventArgs()
   {
    this.protocol = "";
    this.destination_port  = "";
    this.origination_port  = "";
    this.destination_address  = "";
    this.origination_address  = "";
    this.ip_version  = "";

    this.total_packet_length =0;
    this.message_length =0;
    this.header_length =0;

    this.receive_buf_bytes=new byte[len_receive_buf];
    this.ip_header_bytes=new byte[len_receive_buf];
    this.message_bytes=new byte[len_receive_buf];
   }

   public string Protocol
   {
    get {return protocol;}
    set {protocol=value;}
   }
   public string DestinationPort
   {
    get {return destination_port;}
    set {destination_port=value;}
   }
   public string OriginationPort
   {
    get {return origination_port;}
    set {origination_port=value;}
   }
   public string DestinationAddress
   {
    get {return destination_address;}
    set {destination_address=value;}
   }
   public string OriginationAddress
   {
    get {return origination_address;}
    set {origination_address=value;}
   }
   public string IPVersion
   {
    get {return ip_version;}
    set {ip_version=value;}
   }
   public uint PacketLength
   {
    get {return total_packet_length;}
    set {total_packet_length=value;}
   }
   public uint MessageLength
   {
    get {return message_length;}
    set {message_length=value;}
   }
   public uint HeaderLength
   {
    get {return header_length;}
    set {header_length=value;}
   }
   public byte [] ReceiveBuffer
   {
    get {return receive_buf_bytes;}
    set {receive_buf_bytes=value;}
   }
   public byte [] IPHeaderBuffer
   {
    get {return ip_header_bytes;}
    set {ip_header_bytes=value;}
   }
   public byte [] MessageBuffer
   {
    get {return message_bytes;}
    set {message_bytes=value;}
   }
   private string protocol;
   private string destination_port;
   private string origination_port;
   private string destination_address;
   private string origination_address;
   private string ip_version;
   private uint total_packet_length;
   private uint message_length;
   private uint header_length;
   private byte []receive_buf_bytes = null;
   private byte []ip_header_bytes = null;
   private byte []message_bytes = null;
  }

  public delegate void PacketArrivedEventHandler(
   Object sender, PacketArrivedEventArgs args);

  public event PacketArrivedEventHandler PacketArrival;

  protected virtual void OnPacketArrival(PacketArrivedEventArgs e)
  {
   if (PacketArrival != null)
   {
    PacketArrival(this, e);
   }
  }
 }
}

//Form1.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace ReceiveAll
{

 public class MainForm : Form
 {
  RawSocket myRawSock;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.TextBox textBox1;
  string IPs;
  
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.Label label5;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.Label label7;
  private System.Windows.Forms.Label label8;
  private System.Windows.Forms.TextBox textBox2;
  private System.Windows.Forms.Label label9;
  private System.Windows.Forms.Label label10;
  private System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.Label label11;
  private System.Windows.Forms.Label label12;
  private System.Windows.Forms.Label label13;
  private System.Windows.Forms.Label label14;
  private System.Windows.Forms.Label label15;
  private System.Windows.Forms.Label label16;
  private System.Windows.Forms.Label label17;
  private System.Windows.Forms.Label label18;
  private System.Windows.Forms.TextBox textBox4;
  private System.Windows.Forms.Label label19;
  private System.Windows.Forms.Label label20;
  private System.Windows.Forms.TextBox textBox5;
  private System.Windows.Forms.TextBox textBox6;
  private System.Windows.Forms.Button button3;
  private System.Windows.Forms.Button button4;
  
  private System.ComponentModel.Container components = null;

  public MainForm()
  {
   IPAddress ipa;
   InitializeComponent();
   this.AutoScale=true;
   String host=Dns.GetHostName();//获得主机名
   IPHostEntry iph=Dns.Resolve(host);//解析主机地址
   ipa=iph.AddressList[0];//解析主机ip
   IPs=ipa.ToString();
   textBox2.Text=IPs;
   textBox3.Text=host;
  }

  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if(components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows Form Designer generated code
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {
   this.button1 = new System.Windows.Forms.Button();
   this.button2 = new System.Windows.Forms.Button();
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.label1 = new System.Windows.Forms.Label();
   this.label2 = new System.Windows.Forms.Label();
   this.label4 = new System.Windows.Forms.Label();
   this.label5 = new System.Windows.Forms.Label();
   this.label6 = new System.Windows.Forms.Label();
   this.label3 = new System.Windows.Forms.Label();
   this.label7 = new System.Windows.Forms.Label();
   this.label8 = new System.Windows.Forms.Label();
   this.textBox2 = new System.Windows.Forms.TextBox();
   this.label9 = new System.Windows.Forms.Label();
   this.label10 = new System.Windows.Forms.Label();
   this.textBox3 = new System.Windows.Forms.TextBox();
   this.label11 = new System.Windows.Forms.Label();
   this.label12 = new System.Windows.Forms.Label();
   this.label13 = new System.Windows.Forms.Label();
   this.label14 = new System.Windows.Forms.Label();
   this.label15 = new System.Windows.Forms.Label();
   this.label16 = new System.Windows.Forms.Label();
   this.label17 = new System.Windows.Forms.Label();
   this.label18 = new System.Windows.Forms.Label();
   this.textBox4 = new System.Windows.Forms.TextBox();
   this.label19 = new System.Windows.Forms.Label();
   this.label20 = new System.Windows.Forms.Label();
   this.textBox5 = new System.Windows.Forms.TextBox();
   this.textBox6 = new System.Windows.Forms.TextBox();
   this.button3 = new System.Windows.Forms.Button();
   this.button4 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   //
   // button1
   //
   this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
   this.button1.Location = new System.Drawing.Point(8, 536);
   this.button1.Name = "button1";
   this.button1.Size = new System.Drawing.Size(120, 24);
   this.button1.TabIndex = 1;
   this.button1.Text = "&Start";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // button2
   //
   this.button2.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.button2.Location = new System.Drawing.Point(128, 536);
   this.button2.Name = "button2";
   this.button2.Size = new System.Drawing.Size(120, 24);
   this.button2.TabIndex = 2;
   this.button2.Text = "s&Top";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   //
   // textBox1
   //
   this.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Left;
   this.textBox1.Location = new System.Drawing.Point(0, 40);
   this.textBox1.Multiline = true;
   this.textBox1.Name = "textBox1";
   this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
   this.textBox1.Size = new System.Drawing.Size(810, 208);
   this.textBox1.TabIndex = 3;
   this.textBox1.Text = "";
   //
   // label1
   //
   this.label1.BackColor = System.Drawing.SystemColors.Control;
   this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label1.Location = new System.Drawing.Point(0, 24);
   this.label1.Name = "label1";
   this.label1.Size = new System.Drawing.Size(136, 16);
   this.label1.TabIndex = 4;
   this.label1.Text = "源IP";
   this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label2
   //
   this.label2.BackColor = System.Drawing.SystemColors.Control;
   this.label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label2.Location = new System.Drawing.Point(136, 24);
   this.label2.Name = "label2";
   this.label2.Size = new System.Drawing.Size(88, 16);
   this.label2.TabIndex = 5;
   this.label2.Text = "源端口";
   this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label4
   //
   this.label4.BackColor = System.Drawing.SystemColors.Control;
   this.label4.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label4.Location = new System.Drawing.Point(360, 24);
   this.label4.Name = "label4";
   this.label4.Size = new System.Drawing.Size(96, 16);
   this.label4.TabIndex = 7;
   this.label4.Text = "目的端口";
   this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label5
   //
   this.label5.BackColor = System.Drawing.SystemColors.Control;
   this.label5.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label5.Location = new System.Drawing.Point(224, 24);
   this.label5.Name = "label5";
   this.label5.Size = new System.Drawing.Size(136, 16);
   this.label5.TabIndex = 8;
   this.label5.Text = "目的IP";
   this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label6
   //
   this.label6.BackColor = System.Drawing.SystemColors.Control;
   this.label6.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label6.Location = new System.Drawing.Point(456, 24);
   this.label6.Name = "label6";
   this.label6.Size = new System.Drawing.Size(80, 16);
   this.label6.TabIndex = 9;
   this.label6.Text = "协议";
   this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label3
   //
   this.label3.BackColor = System.Drawing.SystemColors.Control;
   this.label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label3.Location = new System.Drawing.Point(536, 24);
   this.label3.Name = "label3";
   this.label3.Size = new System.Drawing.Size(88, 16);
   this.label3.TabIndex = 10;
   this.label3.Text = "包长";
   this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label7
   //
   this.label7.BackColor = System.Drawing.SystemColors.Control;
   this.label7.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label7.Location = new System.Drawing.Point(624, 24);
   this.label7.Name = "label7";
   this.label7.Size = new System.Drawing.Size(136, 16);
   this.label7.TabIndex = 11;
   this.label7.Text = "IP头长";
   this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label8
   //
   this.label8.BackColor = System.Drawing.SystemColors.Control;
   this.label8.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label8.Location = new System.Drawing.Point(760, 24);
   this.label8.Name = "label8";
   this.label8.Size = new System.Drawing.Size(48, 16);
   this.label8.TabIndex = 12;
   this.label8.Text = "IP版本";
   this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // textBox2
   //
   this.textBox2.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.textBox2.Location = new System.Drawing.Point(428, 536);
   this.textBox2.Name = "textBox2";
   this.textBox2.Size = new System.Drawing.Size(128, 21);
   this.textBox2.TabIndex = 13;
   this.textBox2.Text = "";
   //
   // label9
   //
   this.label9.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.label9.Location = new System.Drawing.Point(372, 536);
   this.label9.Name = "label9";
   this.label9.Size = new System.Drawing.Size(48, 16);
   this.label9.TabIndex = 14;
   this.label9.Text = "本机IP:";
   //
   // label10
   //
   this.label10.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.label10.Location = new System.Drawing.Point(564, 536);
   this.label10.Name = "label10";
   this.label10.Size = new System.Drawing.Size(72, 16);
   this.label10.TabIndex = 15;
   this.label10.Text = "本机标识:";
   //
   // textBox3
   //
   this.textBox3.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.textBox3.Location = new System.Drawing.Point(636, 536);
   this.textBox3.Name = "textBox3";
   this.textBox3.Size = new System.Drawing.Size(168, 21);
   this.textBox3.TabIndex = 16;
   this.textBox3.Text = "";
   //
   // label11
   //
   this.label11.BackColor = System.Drawing.SystemColors.Control;
   this.label11.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label11.Location = new System.Drawing.Point(760, 280);
   this.label11.Name = "label11";
   this.label11.Size = new System.Drawing.Size(48, 16);
   this.label11.TabIndex = 25;
   this.label11.Text = "IP版本";
   this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label12
   //
   this.label12.BackColor = System.Drawing.SystemColors.Control;
   this.label12.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label12.Location = new System.Drawing.Point(624, 280);
   this.label12.Name = "label12";
   this.label12.Size = new System.Drawing.Size(136, 16);
   this.label12.TabIndex = 24;
   this.label12.Text = "IP头长";
   this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label13
   //
   this.label13.BackColor = System.Drawing.SystemColors.Control;
   this.label13.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label13.Location = new System.Drawing.Point(536, 280);
   this.label13.Name = "label13";
   this.label13.Size = new System.Drawing.Size(88, 16);
   this.label13.TabIndex = 23;
   this.label13.Text = "包长";
   this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label14
   //
   this.label14.BackColor = System.Drawing.SystemColors.Control;
   this.label14.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label14.Location = new System.Drawing.Point(456, 280);
   this.label14.Name = "label14";
   this.label14.Size = new System.Drawing.Size(80, 16);
   this.label14.TabIndex = 22;
   this.label14.Text = "协议";
   this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label15
   //
   this.label15.BackColor = System.Drawing.SystemColors.Control;
   this.label15.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label15.Location = new System.Drawing.Point(224, 280);
   this.label15.Name = "label15";
   this.label15.Size = new System.Drawing.Size(136, 16);
   this.label15.TabIndex = 21;
   this.label15.Text = "目的IP";
   this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label16
   //
   this.label16.BackColor = System.Drawing.SystemColors.Control;
   this.label16.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label16.Location = new System.Drawing.Point(360, 280);
   this.label16.Name = "label16";
   this.label16.Size = new System.Drawing.Size(96, 16);
   this.label16.TabIndex = 20;
   this.label16.Text = "目的端口";
   this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label17
   //
   this.label17.BackColor = System.Drawing.SystemColors.Control;
   this.label17.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label17.Location = new System.Drawing.Point(136, 280);
   this.label17.Name = "label17";
   this.label17.Size = new System.Drawing.Size(88, 16);
   this.label17.TabIndex = 19;
   this.label17.Text = "源端口";
   this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // label18
   //
   this.label18.BackColor = System.Drawing.SystemColors.Control;
   this.label18.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
   this.label18.Location = new System.Drawing.Point(0, 280);
   this.label18.Name = "label18";
   this.label18.Size = new System.Drawing.Size(136, 16);
   this.label18.TabIndex = 18;
   this.label18.Text = "源IP";
   this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
   //
   // textBox4
   //
   this.textBox4.Anchor = System.Windows.Forms.AnchorStyles.Left;
   this.textBox4.Location = new System.Drawing.Point(0, 296);
   this.textBox4.Multiline = true;
   this.textBox4.Name = "textBox4";
   this.textBox4.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
   this.textBox4.Size = new System.Drawing.Size(810, 208);
   this.textBox4.TabIndex = 17;
   this.textBox4.Text = "";
   //
   // label19
   //
   this.label19.Location = new System.Drawing.Point(0, 8);
   this.label19.Name = "label19";
   this.label19.Size = new System.Drawing.Size(168, 16);
   this.label19.TabIndex = 26;
   this.label19.Text = "收到的包:";
   //
   // label20
   //
   this.label20.Location = new System.Drawing.Point(0, 264);
   this.label20.Name = "label20";
   this.label20.Size = new System.Drawing.Size(168, 16);
   this.label20.TabIndex = 27;
   this.label20.Text = "发出的包:";
   //
   // textBox5
   //
   this.textBox5.Location = new System.Drawing.Point(816, 24);
   this.textBox5.Multiline = true;
   this.textBox5.Name = "textBox5";
   this.textBox5.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
   this.textBox5.Size = new System.Drawing.Size(176, 224);
   this.textBox5.TabIndex = 28;
   this.textBox5.Text = "";
   //
   // textBox6
   //
   this.textBox6.Location = new System.Drawing.Point(816, 280);
   this.textBox6.Multiline = true;
   this.textBox6.Name = "textBox6";
   this.textBox6.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
   this.textBox6.Size = new System.Drawing.Size(176, 224);
   this.textBox6.TabIndex = 29;
   this.textBox6.Text = "";
   //
   // button3
   //
   this.button3.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
   this.button3.Location = new System.Drawing.Point(248, 536);
   this.button3.Name = "button3";
   this.button3.Size = new System.Drawing.Size(120, 24);
   this.button3.TabIndex = 30;
   this.button3.Text = "&Clean";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   //
   // button4
   //
   this.button4.Location = new System.Drawing.Point(696, 248);
   this.button4.Name = "button4";
   this.button4.Size = new System.Drawing.Size(112, 24);
   this.button4.TabIndex = 31;
   this.button4.Text = "c&Lean";
   this.button4.Click += new System.EventHandler(this.button4_Click);
   //
   // MainForm
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(994, 561);
   this.Controls.Add(this.button4);
   this.Controls.Add(this.button3);
   this.Controls.Add(this.textBox6);
   this.Controls.Add(this.textBox5);
   this.Controls.Add(this.label20);
   this.Controls.Add(this.label19);
   this.Controls.Add(this.label11);
   this.Controls.Add(this.label12);
   this.Controls.Add(this.label13);
   this.Controls.Add(this.label14);
   this.Controls.Add(this.label15);
   this.Controls.Add(this.label16);
   this.Controls.Add(this.label17);
   this.Controls.Add(this.label18);
   this.Controls.Add(this.textBox4);
   this.Controls.Add(this.textBox3);
   this.Controls.Add(this.label10);
   this.Controls.Add(this.label9);
   this.Controls.Add(this.textBox2);
   this.Controls.Add(this.label8);
   this.Controls.Add(this.label7);
   this.Controls.Add(this.label3);
   this.Controls.Add(this.label6);
   this.Controls.Add(this.label5);
   this.Controls.Add(this.label4);
   this.Controls.Add(this.label2);
   this.Controls.Add(this.label1);
   this.Controls.Add(this.textBox1);
   this.Controls.Add(this.button2);
   this.Controls.Add(this.button1);
   this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
   this.MaximizeBox = false;
   this.Name = "MainForm";
   this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
   this.Text = "原始套接字";
   this.Load += new System.EventHandler(this.MainForm_Load);
   this.ResumeLayout(false);

  }
  #endregion

  private void MainForm_Load(object sender, System.EventArgs e)
  {
   string IPString="10.10.10.10";
   IPHostEntry HosyEntry = Dns.Resolve(Dns.GetHostName());
   if(HosyEntry.AddressList.Length > 0)
   {
    foreach(IPAddress ip in HosyEntry.AddressList)
    {
     IPString=ip.ToString();
    }
   }
   
   myRawSock=new RawSocket();
   myRawSock.CreateAndBindSocket (IPString);
   myRawSock.PacketArrival  += new RawSocket.PacketArrivedEventHandler(DataArrival);
  }

  private void DataArrival(Object sender, RawSocket.PacketArrivedEventArgs  e)
  {
   textBox1.Text+=e.OriginationAddress+"/r/t/t"+e.OriginationPort+"/r/t/t"+e.DestinationAddress+"/r/t/t"+e.DestinationPort+"/r/t/t"+e.Protocol+"/r/t/t"+e.PacketLength+"/r/t/t"+e.HeaderLength+"/r/t/t"+e.IPVersion+"/r/n";
   /*
   string s=null;
   if(e.OriginationAddress.Equals(IPs))
   {
    textBox4.Text+=e.OriginationAddress+"/r/t/t"+e.OriginationPort+"/r/t/t"+e.DestinationAddress+"/r/t/t"+e.DestinationPort+"/r/t/t"+e.Protocol+"/r/t/t"+e.PacketLength+"/r/t/t"+e.HeaderLength+"/r/t/t"+e.IPVersion+"/r/n";
    for(int i=0;i<e.MessageBuffer.Length;i++)s+=e.MessageBuffer[i].ToString();
    textBox6.Text=s;
    
   }
   if(e.DestinationAddress.Equals(IPs))
   {
    textBox1.Text+=e.OriginationAddress+"/r/t/t"+e.OriginationPort+"/r/t/t"+e.DestinationAddress+"/r/t/t"+e.DestinationPort+"/r/t/t"+e.Protocol+"/r/t/t"+e.PacketLength+"/r/t/t"+e.HeaderLength+"/r/t/t"+e.IPVersion+"/r/n";
    for(int i=0;i<e.MessageBuffer.Length;i++)s+=e.MessageBuffer[i].ToString();
    textBox5.Text=s;
    while(true);
   }*/
  }

  private void button1_Click(object sender, System.EventArgs e)
  {
   myRawSock.KeepRunning =true;
   myRawSock.Run ();
  }

  private void button2_Click(object sender, System.EventArgs e)
  {
   myRawSock.KeepRunning =false;
  }

  private void button3_Click(object sender, System.EventArgs e)
  {
   textBox4.Text="";
  }

  private void button4_Click(object sender, System.EventArgs e)
  {
   textBox1.Text="";
  }

 }
}

//AssemblyInfo.cs
using System.Reflection;
using System.Runtime.CompilerServices;

//
// 有关程序集的常规信息是通过下列
//属性集控制的。更改这些属性值可修改与程序集
//关联的信息。
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]  

//
// 程序集的版本信息包含下列 4 个值:
//
//      主版本
//      次版本
//      内部版本号
//      修订号
//
// 您可以指定所有值,或使用“修订号”和“内部版本号”的默认值,方法为按如下方式
// 使用“*”:

[assembly: AssemblyVersion("1.0.*")]

//
// 要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考
// Microsoft .NET 框架文档。
//
// 使用下面的属性控制用于签名的密钥。
//
// 注意:
//   (*) 如果未指定密钥,则程序集不会被签名。
//   (*) KeyName 是指已经安装在计算机上的
//      加密服务提供程序 (CSP) 中的密钥。KeyFile 是指包含
//       密钥的文件。
//   (*) 如果 KeyFile 和 KeyName 值都已指定,则
//       发生下列处理:
//       (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
//       (2) 如果 KeyName 不存在而 KeyFile 存在,则
//           KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
//   (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
//       在指定 KeyFile 时,KeyFile 的位置应该相对于
//       项目输出目录,即
//       %Project Directory%/obj/<configuration>。例如,如果 KeyFile 位于
//       该项目目录,应将 AssemblyKeyFile
//       属性指定为 [assembly: AssemblyKeyFile("..//..//mykey.snk")]
//   (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET 框架
//       文档。
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

//main.cs
using System;
using System.Windows.Forms;
using ReceiveAll;

internal class App
{
 internal static void Main()
 {
  MainForm frmMain = new MainForm();
  Application.Run(frmMain);
 }
}

原文地址:http://www.xuebuyuan.com/751626.html

 

C#之Raw Socket网络封包监视源码