IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络原理 实验3 《IP数据包捕获及数据分析》 -> 正文阅读

[网络协议]计算机网络原理 实验3 《IP数据包捕获及数据分析》

计算机网络原理 实验3 《IP数据包捕获及数据分析》

一、实验目的

JPCAP是一个能够捕获、发送网络数据包的Java类库包。这个包用到了Winpcap/Libpcap和原始套接字API,目前,JPCAP在FreeBSD 3.x、Linux RedHat 6.1、Solaris 和Microsoft Windows 2000/XP系统上已经做过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。Java语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用Winpcap/Libpcap,给Java语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。

通过本次实验熟悉使用JPCAP捕获数据包,并从捕获的数据了解IP数据包包含的信息。

二、实验内容

1、使用Keita Fujiiy编写的基于JPCAP 的JPCAPDumper软件捕获网络数据,了解JPCAP能实现的功能。JPCAPDumper为英文程序,可参考反编译和汉化后的程序数据包捕获器,功能一致;
2、熟悉JPCAP API的常用类(ARPPacket、DatalinkPacket、IPAddress、IPPacket等);
3、熟悉JPCAP环境的安装步骤;
4、使用JPCAP编写简单的ip数据包捕获程序;
5、参考反编译和汉化的数据包捕获器代码,实现可视化IP数据包捕获程序(选做)。

三、实验方法

1、利用jpcap.jar、substance.jar等相关Java工具包提供的方法、类,实现对本机网络端口的获取、侦听及对各类协议的数据包的抓取、解析;
2、使用Java Swing构造图形化抓包程序JPcapDumper实现对抓包的图形化控制。主要使用的开发环境为NetBeans。

四、实验步骤

1、JPCAP环境的安装(Windows 10)
(1) 安装WinPcap (http://winpcap.polito.it/),选定版本为4.1.3


(2) 下载并解压缩Jpcap的最新版本


(3) 复制Jpcap.dll到C:\WINDOWS\system32目录下
(4) 在NetBeans环境中导入jpcap.jar包、substance.jar包,并启动WinCap程序。


2、构建简单的抓包程序进行抓包测试
构建简单的Java程序进行抓包,检测WinCap与JPCAP工具是否都正确起作用。以抓取IP数据包为例,JPCAP抓包基本步骤为:绑定网络设备、抓包、分析。代码如下。

package csu;

import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        /*--            第一步绑定网络设备           --*/
        NetworkInterface[] devices = JpcapCaptor.getDeviceList();
        for (NetworkInterface n : devices) {
            System.out.println(n.name + "   |   " + n.description);
        }
        System.out.println("---------------------------------------------------");

        JpcapCaptor jpcap = null;
        // 限定抓取数据包的多少个字节
        int caplen = 1512;
        // 设置是否混杂模式。
        // 处于混杂模式则接收所有的数据包,若之后又调用了包过滤函数getFilter()则不起作用
        boolean promiseCheck = true;

        // openDevice方法获得某个网卡接口的连接
        // 50主要用于processPacket()方法,设定超时时间
        try {
            jpcap = JpcapCaptor.openDevice(devices[3], caplen, promiseCheck, 50);
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*--               第二步抓包               --*/
        int i = 0;
        while (i < 10) {
            Packet packet = jpcap.getPacket();
            if (packet instanceof IPPacket && ((IPPacket) packet).version==4) {
                i++;
                IPPacket ip = (IPPacket) packet;

                System.out.println("版本:IPv4");
                System.out.println("优先权:"+ip.priority);
                System.out.println("服务设置-是否为最大吞吐量:"+ip.t_flag);
                System.out.println("服务设置-是否有更低时延:"+ip.d_flag);
                System.out.println("服务设置-是否有最高的可靠性:"+ip.r_flag);
                System.out.println("长度:"+ip.length);
                System.out.println("标识:"+ip.ident);
                System.out.println("数据偏移设置-有无碎片标识:"+ip.rsv_frag);
                System.out.println("数据偏移设置-末尾碎片标识:"+ip.dont_frag);
                System.out.println("数据偏移设置-有碎片标识:"+ip.more_frag);
                System.out.println("分段偏移:"+ip.offset);
                System.out.println("生存时间(周期):"+ip.hop_limit);

                String protocol = "";
                switch (new Integer(ip.protocol)) {
                    case 1: protocol="ICMP"; break;
                    case 2: protocol="IGMP"; break;
                    case 6: protocol="TCP"; break;
                    case 8: protocol="EGP"; break;
                    case 9: protocol="IGP"; break;
                    case 17: protocol="UDP"; break;
                    case 41: protocol="IPv6"; break;
                    case 89: protocol="OSPF"; break;
                    default: protocol="Other"; break;
                }

                System.out.println("协议:"+protocol);
                System.out.println("源IP:"+ip.src_ip.getHostAddress());
                System.out.println("目的IP:"+ip.dst_ip.getHostAddress());
                System.out.println("源主机名:"+ip.src_ip);
                System.out.println("目的主机名:"+ip.dst_ip);
                System.out.println("----------------------------------");
            }
        }
    }
}

3、可视化监控数据包并分析
参考反编译和汉化的数据包捕获器代码,以上述测试代码的核心部分为基础,使用NetBeans实现可视化IP数据包捕获程序。即实现数据包捕获器菜单栏里统计选项内的功能。

五、实验结果

1、简单抓包测试程序测试结果:


2、可视化监控抓包程序IP Packets Catcher。
(1) 初始化,上面是控制按钮,有两个页面:detail & list页面显示抓包结果,Configure页面对抓包过程进行配置。点击Config按钮进入Configure页面,分为两个个模块:左侧是配置,右侧是使用说明。


(2) 回到detail & list页面点击Start按钮开始抓包,点击Stop按钮暂停抓包。左侧显示抓到的所有的包的简略信息列表,右侧显示的是最近一次抓到的包的信息。


对左侧任一表项双击,即可获取该数据包的详细信息(覆盖在右侧展示区域)。

六、实验结论

对于IPv4数据包,主要包含的信息包括IP版本、优先权、长度、服务设置、标识、数据偏移设置、分段偏移、生存周期、协议、源IP、目的IP、源主机名、目的主机名等等。对于其他的数据包,主要的信息也包括长度、生存周期、协议、源/目的IP等等信息。

七、实验小结

本次实验主要是体验了网络数据包的抓取与解析等实际的工作,对各类协议的数据包头部组成有了更为深入和直观的了解,对JPCAP等抓包相关工具的使用更加熟悉。实验中发现的一点是双绞线接入的网络与WIFI接入的网络端口应该是不同的,因为两种网络能抓到包的端口不同。实验遇到的问题是一开始忘记打开WinCap程序导致jpcap获取不到端口也抓不到数据包,仔细检查实验流程解决了这个问题。

IPv4即网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。IPv4是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包均能送达目的地,也不保证所有数据包均按照正确的顺序无重复地到达。这些方面是由上层的传输协议(如传输控制协议)处理的。

IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。

八、附录

可视化监控抓包程序IP Packets Catcher源码(NetBeans 项目)地址:IP-Packets-Catcher

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:02:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 6:46:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计