zoukankan      html  css  js  c++  java
  • 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 = 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 = false;
       }
       catch(SocketException)
       {
        ret_value = 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);
     }
    }

    程序源代码:

    //RawSocket.cs

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;

    namespace ReceiveAll
    {
        [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 = 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 = false;
       }
       catch(SocketException)
       {
        ret_value = 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 partial 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()
            {
                Control.CheckForIllegalCrossThreadCalls = false;
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
                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 = "监视";
                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 = "停止";
                this.button2.Click += new System.EventHandler(this.button2_Click);
                //
                // textBox1
                //
                this.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Left;
                this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
                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.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
                //
                // 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;
                //
                // 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;
                //
                // 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.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
                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;
                //
                // 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.BackColor = System.Drawing.Color.Black;
                this.textBox5.ForeColor = System.Drawing.Color.White;
                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;
                //
                // textBox6
                //
                this.textBox6.BackColor = System.Drawing.Color.Black;
                this.textBox6.ForeColor = System.Drawing.Color.White;
                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;
                //
                // 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 = "清屏";
                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 = "清屏";
                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.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
                this.MaximizeBox = false;
                this.Name = "MainForm";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.Text = "Socket数据监视工具";
                this.Load += new System.EventHandler(this.MainForm_Load);
                this.ResumeLayout(false);
                this.PerformLayout();

            }
            #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 + " " + e.OriginationPort + " " + e.DestinationAddress + " " + e.DestinationPort + " " + e.Protocol + " " + e.PacketLength + " " + e.HeaderLength + " " + e.IPVersion + " ";

                string s=null;

                if(e.OriginationAddress.Equals(IPs))
                {
                    textBox4.Text += e.OriginationAddress + " " + e.OriginationPort + " " + e.DestinationAddress + " " + e.DestinationPort + " " + e.Protocol + " " + e.PacketLength + " " + e.HeaderLength + " " + e.IPVersion + " ";
                 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 + " " + e.OriginationPort + " " + e.DestinationAddress + " " + e.DestinationPort + " " + e.Protocol + " " + e.PacketLength + " " + e.HeaderLength + " " + e.IPVersion + " ";
                 for(int i=0;i<e.MessageBuffer.Length;i++)
                 s+=e.MessageBuffer[i].ToString();
                 textBox5.Text=s;
                }
            }

            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 = "";
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                //Control.CheckForIllegalCrossThreadCalls = false;
            }

        }
    }

    //Main.cs

    using System;
    using System.Windows.Forms;
    using ReceiveAll;

    internal class App
    {
        internal static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            MainForm frmMain = new MainForm();
            Application.Run(frmMain);
        }
    }

    程序截图:

    原文地址:http://www.xuebuyuan.com/751626.html
  • 相关阅读:
    谷歌三架马车之 The Google File System 中文版
    数据集市 Data Mart
    VMware虚拟机ubuntu下安装VMware Tools步骤
    NOIP普及组 海港 题解
    HXD的DS
    离散化
    哈希表
    状态压缩DP 初探
    《信息学奥赛一本通》大盗阿福 题解
    NOIP 加工零件 题解
  • 原文地址:https://www.cnblogs.com/milantgh/p/4124762.html
Copyright © 2011-2022 走看看