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);
 }
}

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

时间: 2024-10-14 20:29:37

C#之Raw Socket网络封包监视源码的相关文章

php网络名片系统源码免费电子云名片3.2版

网上找了很久php版名片在线设计,都没有找到一份好的源码可以下载 无奈,于是自己做了一个名片在线设计系统. 由于php库的不支持.这个系统源码还有一些bug. 资源名称:php网络名片系统源码免费电子云名片3.2版关键词:移动名片php源码,掌上名片下载,微名片在线设计演示链接:http://www.39wifi.com/m官方链接:http://www.39wifi.com下载地址:http://pan.baidu.com/s/1o7XBENS 资源描叙:微名片是通过DNS能够让您直接在互联网

C#之Raw Socket实现网络封包监视

同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制.  在本文例子中,nbyte.BasicClass命名空间实现了RawSocket类,它包含了我们实现数据包监视的核心技术.在实现这个类之前,需要先写一个IP头结构,来暂时存放一些有

分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)

Swa-server 开源框架* 适用于中小型游戏,如:养成.RPG.棋牌等:应用软件,如:聊天室等* 已经封套好底层socket管理,sql请求处理.数据加密解密* 拿来即可开工写业务* Swa-server是面向小型快速开发的框架,所以采用单进程模式,以后更新也是单进程方案去解决所遇到的问题,这样可以减少开发时间与人力(其实很多服务器用单进程就够了) * 支持IO异步(基于boost库IO)* 支持sql异步执行(有回调函数)* 玩家管理器* 数据库管理器 项目中例子* 1.请求获得动态密码

Android 网络框架 volley源码剖析

转载请注明出处:  http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚.因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍.同时,这也是Volley系列的最后一篇文章了. 其实,Volley的官方文档中本身就附有了一张Volley的工作流程图,如下图所示. 多数朋友突然看到一张

Anroid-async-http封装网络请求框架源码分析

Android-async-http开源项目可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来非常简单, 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果. 主要特点:处理异步Http请求,并通过匿名内部类处理回调结果,Http异步请求均位于非UI线程,不会阻塞UI操作,通过线程池处理并发请求处理文件上传.下载,响应结果自动打包JSON格式. 一, Android-async-http

Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10

在阅读unpv1时运行源代码的环境配置,这里简单记录一下 源代码里的README 写得挺详细的,但是在Linux 系统的下还是没办法直接编译通过的, 这里我使用的是ubuntu 19.10(在腾讯云ubuntu server 18.04.1也测试通过) 以下是简单的步骤: 1.下载源码并解压 2.解压源代码后得到unpv13e, 3.开始编译 cd unpv13e ./configure cd lib make cd ../libfree make 这时报错:inet_ntop.c: In fu

[转]Linux Socket编程 Socket抓取网页源码

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型 有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 2.

Linux IO多路复用之epoll网络编程及源码(转)

原文: 前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一行,然后输出到客户端 客户端收到服务端的响应,输出这一行到标准输出 服务端代码 代码如下: #include <unistd.h> #include <sys/types.h> /* basic system data types */ #include <sys/soc

iOS开发 网络框架AFNetworking源码(一)

目前iOS开发中使用最多的网络访问框架就是AFNetworking了.作为一个第三方框架,用起来确实比直接使用iOS自带的要方便得多. AFNetworking在github上可以直接下载.地址为:https://github.com/AFNetworking/AFNetworking . 首先先看AFURLConnectionOperation类,继承自NSOperation. @interface  AFURLConnectionOperation :  NSOperation 在这里构建了