大家可以建立一个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 + "\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;
}
}
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);
}
}
程序截图: