`
javasogo
  • 浏览: 1817619 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[C#]RawSocket的C#源代码

阅读更多
163大家可以建立一个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);
}
}

分享到:
评论

相关推荐

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

    CreateAndBind函数实现了创建RawSocket,并把它与终结点(IPEndPoint:本机IP和端口)绑定。 网络封包监视的应用 网络封包监视技术可以应用于各种场景,包括网络安全、性能优化、流量监控等方面。例如,可以使用...

    纯C#封包拦截源代码

    本文将深入探讨“纯C#封包拦截源代码”这一主题,包括其核心概念、实现原理以及相关的编程技巧。 首先,我们要理解什么是封包拦截。在网络通信中,数据通常被分割成若干个数据包进行传输,每个数据包包含源地址、...

    C#TCP-IP服务器和客户端源代码.rar

    总的来说,这个"C# TCP-IP服务器和客户端源代码"资源是一个很好的学习起点,它展示了如何在C#中使用Socket类实现TCP/IP通信的基本流程。对于初学者,理解并实践这些代码将有助于深入理解网络编程概念,为进一步开发...

    c# socket抓包 混合抓包工具。

    在IT行业中,网络数据包抓取是一个至关重要的技术,它用于监控、分析和调试网络通信...通过查看源代码,开发者可以学习到如何在C#中实现网络数据包的捕获、解析和处理,这对于网络编程和网络安全的学习是非常有价值的。

    C# Socket 异步接受网络广播

    为了接收广播数据,需要创建一个Socket实例,并指定其地址族为`AddressFamily.InterNetwork`,类型为`SocketType.Raw`,协议为`ProtocolType.IP`。接着,设置Socket的Blocking属性为false,使其变为非阻塞模式。然后...

    C# 抓包分析工具 源码

    压缩包中的"抓包分析工具"很可能是整个项目的可执行文件或者解决方案文件,包含了所有必要的源代码和资源。通过研究这个项目,开发者不仅可以学习如何在C#中使用RawSocket进行底层网络通信,还可以了解如何实现HTTP...

    c#抓包项目源码

    标题 "c#抓包项目源码" 涉及到的是使用C#编程语言实现网络数据包捕获(抓包)的应用程序。...开发者可以深入研究源代码来学习如何在C#中实现网络数据包捕获,这对于网络编程和网络分析的学习者来说是非常有价值的资源。

    谈起socket编程,大家也许会想起QQ和IE,没错。

    以上代码展示了如何使用C#实现RawSocket的基本框架,包括定义IPHeader结构体、实现RawSocket类及其构造方法和创建绑定方法。这些基础知识对于理解Socket编程特别是RawSocket的使用至关重要。通过这种方式,开发者...

    C#写的原始套接字数据包转发代码

    `.bak`文件是备份文件,通常是在修改源代码后自动生成的。 总的来说,这个C#项目提供了一个数据包嗅探和转发的工具,利用原始套接字技术,可以直接操作网络层的数据包,从而实现更灵活的网络监控和管理。这在网络...

    C#-sniffer

    实现这一功能的关键在于对网络接口的底层访问,C#提供了System.Net.NetworkInformation命名空间,其中的NetworkInterface类可以用来获取所有网络接口的信息,再通过RawSocket或者WinPCap库来实现低级别的数据包捕获...

    c代码-RAW_SOCKET数据发送

    在提供的文件列表中,`main.c`很可能是实现以上步骤的源代码,而`README.txt`可能包含了代码的使用说明或额外的技术细节。通过分析这些文件,你可以更深入地理解RAW_SOCKET的工作原理和C语言的实现方式。 总之,RAW...

    C#截获本机数据包方法

    在C#中,我们可以使用`System.Net.Sockets.Socket`类来创建原始套接字(Raw Socket),这种类型的套接字允许我们直接与网络层交互,从而能够捕获和发送IP数据包。以下是一个创建原始套接字的基本步骤: 1. 实例化一...

    C# 抓取TCP UDP网络数据包.rar

    然而,.NET Framework默认并不支持原始套接字(raw socket),这使得直接捕获TCP和UDP数据包变得复杂。为了实现这个功能,通常需要借助第三方库,如Pcap.NET或SharpPcap。这些库提供了对libpcap(一个跨平台的数据包...

    wince下c#实现pppoe

    1. **创建原始套接字**:由于Wince不直接支持PPP协议,我们需要使用低级别的Socket类,创建一个RAW类型的套接字,以便发送和接收原始的PPP和Ethernet帧。 2. **实现PPPoE发现阶段**:编写代码来构建并发送PADI报文...

    wince6.0实现ICMP协议执行ping命令

    在提供的压缩包文件"win-mobile-code-master"中,可能包含了实现上述功能的源代码示例。这些代码可以作为学习和参考,帮助理解如何在WinCE6.0上使用C#实现ICMP协议并执行ping命令。通过分析和理解这些代码,开发者...

    网络抓包协议分析

    在本文中,我们将重点讨论如何使用C#的RawSocket类来实现网络抓包,同时涵盖TCP/IP协议的理解,原始套接字编程接口,以及SQL Server数据库的应用。 1. **网络编程基础**: - 网络编程涉及编写能够通过网络进行通信...

    简单的路由追踪程序

    “包括源代码”则意味着我们可以查看并学习到实际的编程实现,对于学习C#网络编程或理解Tracert工作原理的人来说是一份宝贵的资源。 在标签中,"C#"是微软开发的一种面向对象的编程语言,广泛应用于Windows桌面应用...

    计算机网络专业课程设计网络流量计的设计和实现计.docx

    开发过程中,Microsoft Visual Studio作为开发平台,结合C#语言的强类型、面向对象特性,可以实现高效且稳定的代码编写。Winform库提供了丰富的UI组件,方便创建用户界面,与后台的Raw Socket编程紧密结合,实现完整...

    抓包代码分析

    public class RawSocket { // 初始化原始套接字 private void InitializeSocket() { // 创建原始套接字 // 设置混杂模式 } // 读取数据包 private void ReceivePacket() { // 接收数据包 // 解析IP头 }...

Global site tag (gtag.js) - Google Analytics