• 网络嗅探与协议分析 验收作业


    网络嗅探与协议分析 验收作业

    任务详情

    (1)根据教材参考代码,编写有个简单网络抓包工具。要求核心代码和运行结果截图1-2张。(3分)代码push到码云(1分)

    (2)找一个网站或者搭建一个本地网站,登录网站,并嗅探,分析出账号和密码,结果截图1-2张。(3分)可以用邮箱、各类博客、云班课,只能分析自己的账号,严禁做各类攻击,否则后果自负。

    实践过程

    任务一

    在网上找的JAVA语言编写的简易抓包工具,粗略读懂代码,添加了注释
    功能介绍:
    1.获取网络设备列表。

    2.选择网卡并打开。

    3.当捕获数据包时,可能需要设置过滤器。

    4.捕获数据包或者发送数据包。

    5.统计数据的流量
    核心代码:

     // 获取网络接口列表
    public static void getDevices() {
        	//getDeviceList()返回一个网络设备列表
            NetworkInterface[] devices = JpcapCaptor.getDeviceList();
            for (int i = 0; i < devices.length; i++) {
                //name:这个设备的名称;description:网卡是XXXX牌子XXXX型号之类的描述
                System.out.println(i + ": " + devices[i].name + "("
                        + devices[i].description + ")");
                //datalink_name 该网络设备所对应数据链路层的名称。具体来说,例如Ethernet10M、100M、1000M等等
                System.out.println(" datalink: " + devices[i].datalink_name + "("
                        + devices[i].datalink_description + ")");
                //输出网卡的MAC地址
                System.out.print(" MAC address:");
                for (byte b : devices[i].mac_address)
                    System.out.print(Integer.toHexString(b & 0xff) + ":");
                	System.out.println();
                for (NetworkInterfaceAddress a : devices[i].addresses)
                    System.out.println	(" address:" + a.address + " " + a.subnet
                            + " " + a.broadcast);
            }
    
    // 使用逐个捕获方法, 从网络接口捕获数据包
    public static void oneByOneReceiver(int index, int time) throws IOException {
            NetworkInterface[] devices = JpcapCaptor.getDeviceList();
            JpcapCaptor captor = JpcapCaptor.openDevice(devices[index], 65535,
                    false, 20);
            //创建一个文件并向文本文件写入数据包数据,文件输入则是packets.txt(java.io.File)
            PrintWriter pw = new PrintWriter(new FileWriter(new File("packets.txt")));
            // 设置过滤器
            captor.setFilter("ip", true);
            int counter = 0;
            Packet packet;
            long startTime = System.currentTimeMillis();
            while (startTime + time * 60 * 10 >= System.currentTimeMillis()) {
                packet = captor.getPacket();//抓取数据包
                System.out.println(packet);
                //将数据包写入一个txt文档内
                if (packet != null) {
                    String ips = packet.toString().split("\s+")[1];
                    pw.write(ips);
                    pw.println();
                    counter++;
                }
            }
            pw.close();
            CounterPackets cp = new CounterPackets();//自定义类
            cp.readPackets();//自定义方法
            cp.print();
            //输出捕获到的包数
            System.out.println("PacketNumbers:" + counter);
        }
    
    //获取源地址和目的地址
    public String[] getIps (String ips) {
            StringBuffer sb = new StringBuffer(ips);
            for (int i = 0; i < ips.length(); i++) {
                //对文本中的ip地址进行分离化
                if (ips.charAt(i) == '/' || ips.charAt(i) == '>' || ips.charAt(i) == '-') {
                    sb.replace(i, i + 1, " ");
                }
            }
            ips = sb.toString().trim();
            return ips.split("\s+");
        }
    
    //将结果打印到控制台
    public void print() {
            System.out.println("源地址" + "       " + "目的地址" + "     " );
            Iterator it = counter.keySet().iterator();
            while (it.hasNext()) {
                String index = (String)it.next();
                String[] ips = index.split("\s+");
                String srcIp = String.format("%-6s", ips[0]);
                String dstIp = ips[1];
                int number = counter.get(index);
                System.out.println(srcIp + "        " + dstIp + "          " + number);
            }
        }
    

    运行结果截图
    将本机的所有网卡的相关信息输出,因为本机连接的网络是WLAN,本机IP地址是192.168.1.6,这里我们可以选择网卡号3,来抓取IP数据包


    结果截图如图所示:

    任务二

    首先找一个简单(最好HTTP数据包是以明文传输)可登录的网站,这里我是选择我的电脑本地自建的简易网站,网站的搭建使用工具主要包括Mysql-front、PHPstudy(一个套件集成软件)、sublime。

    网站的登录界面:

    如图是PHPstudy界面,这里我只启动了Apache2.4.39服务和MySQL服务

    数据库建表如图所示

    有了以上这些准备工作,一个简单的网站就可以搭建起来,通过在网站界面内输入账号密码,将账号密码传输到MySQL数据库中,这里我代码里是用的HTTP中的POST请求上传至数据库。然后,我们就可以正式开始实验了。
    打开wireshark,这里我们必须使用Npcaploopback adapter这个环回网卡,如果使用正常物理网卡,那我们从网页post到数据库中的HTTP数据包wireshark是不能捕获到的,因为此时数据包的传输不会经过物理网卡,但会经过环回网卡

    现在开始捕获数据,同时我们在网页上输入账号和密码,点击登录

    可以看到这时候我们已经捕获到数据

    因为我们知道账号密码是在HTTP数据包中进行传输的,所以筛选出HTTP包,并且我们容易的找到了带有POST请求的HTTP数据包

    查看HTML模块,最终,我们通过嗅探分析数据包找到了账号密码!

  • 相关阅读:
    pandas--对axis=0,axis=1的理解
    启动secondarynamenode时报错
    5月27日经历问题(在有框架的情况下从无到有增加一套功能)
    5.21工作记录(修改页面跳转,去掉多余的js;增加图片清除功能)
    工作记录520
    5月14日经历问题
    idea快捷键
    Linux下常用redis指令
    初识lunix
    Redis
  • 原文地址:https://www.cnblogs.com/lilei0915lgz/p/12577427.html
Copyright © 2020-2023  润新知