计算机网络原理 实验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协议。JPCAP是由在美国加利福尼亚大学Irvine分校(UCI)攻读博士学位的日本人Keita Fujiiy研制发布的,其主页为http://netresearch.ics.uci.edu/kfujii/ 。
  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数据包捕获程序(选作)。
三、实验方法

  利用Intellij IDEA开发工具实现IP抓包实验,利用JpcapDumper可演示Jpcap功能(JpcapDumper是Keita Fujiiy编写的基于Jpcap的网络分析软件)。

四、实验步骤
  1. 阅读资料里提供的JPCAP API,熟悉JPCAP常用类和方法。
    (1) Jpcap0.4版本共有1个分析器接口14个分析器类,分别简介如下:
    (2) JpcapHandler :这个接口用来定义分析被捕获数据包的方法
    (3) ARPPacket :这个类描述了ARP/RARP包,继承了Packet类
    (4) DatalinkPacket :这个抽象类描述了数据链路层
    (5) EthernetPacket :这个类描述了以太帧包,继承DatalinkPacket类
    (6) ICMPPacket :这个类描述了ICMP包,继承了IPPacket类
    (7) IPAddress :这个类描述了IPv4和IPv6地址,其中也包含了将IP地址转换为域名的方法
    (8) IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4和IPv6
    (9) IPv6Option :这个类描述了IPv6选项报头
    (10) Jpcap :用来捕获数据包
    (11) Jpcap.JpcapInfo :Jpcap的内部类, 它包含被捕获数据包的信息 (在jpcap0.4修改部分BUG之后不再使用这个类)
    (12) JpcapSender :它用来发送一个数据包
    (13) JpcapWriter :它用来将一个被捕获的数据包保存到文件
    (14) Packet :这个类是所有被捕获的数据包的基类
    (15) TCPPacket :这个类描述TCP包,继承了IPPacket类
    (16) UDPPacket :这个类描述了UDP包,继承了IPPacket类
  2. 运行JpcapDumper演示Jpcap功能;
  3. 利用Intellij IDEA编程实现Jpcap抓包;
    3.1 下载安装配置jdk;
    3.2 下载安装WinPcap4.1.3,WinPcap4.1.3可以为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。
    3.3 下载Jpcap.dll,复制到系统的jre环境下,用于后续实验,本次实验存放在C:\Program Files\Java\jre1.8.0_211\bin目录下。
    3.4 下载Jpcap.jar包,用于抓包实验运行,下载官网为http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html,但是官网目前没用了,后来我在网上找到的最新的存放在github中,可以在此下载(https://github.com/zz2summer/jpcap),Jpcap.dll也存放在这里。
    下载完成后复制到jre的相关目录下,本次实验存放目录为C:\Program Files\Java\jre1.8.0_211\lib\ext。
    3.5 利用Intellij IDEA创建java工程,先导入Jpcap.jar包;
    3.6 根据Jpcap.jar包的相关类与方法进行实验编写,编写代码如下所示:
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;

import java.io.IOException;

public class IPPacketTest {
    public static void main(String[] args) throws IOException {
        //-----------第一步绑定网卡设备---------------
        //返回一个网络设备列表
        NetworkInterface[] devices = JpcapCaptor.getDeviceList();
        for(NetworkInterface n : devices){
            System.out.println(n.name + "   |       " + n.description );
        }
        System.out.println("-------------------------------------");

        JpcapCaptor jpcap = null;
        int caplen = 1514;
        boolean promiscCheck = true;

        //caplen限制每一次收到一个数据,只提取该数据包中前多少字节
        //Promise:设置是否混杂模式。处于混杂模式将接受所有数据包,若之后又调用了包过滤函数setFilter()将不在起任何作用
        //50这个参数主要用于processPacket()方法,指定超时的时间
        jpcap = JpcapCaptor.openDevice(devices[0],caplen, promiscCheck,20);

        //--------------------第二步抓包------------------
        int i=0;
        while( i < 10 ){
            Packet packet = jpcap.getPacket();
            String protocol = null;
            if(packet instanceof IPPacket && ((IPPacket)packet).version==4){
                i++;
                IPPacket ip = (IPPacket)packet;   //将包强制转为IP包

                System.out.println("版本:IPv4");
                System.out.println("优先权:" + ip.priority);
                System.out.println("区分服务:最大的吞吐量:" + ip.t_flag);
                System.out.println("区分服务:最高的可靠性:" + ip.r_flag);
                System.out.println("长度:" + ip.length);
                System.out.println("标识:" + ip.ident);
                System.out.println("DF:Don't Fragment:" + ip.dont_frag);
                System.out.println("MF:More Fragment:" + ip.more_frag);
                System.out.println("片偏移:" + ip.offset);
                System.out.println("生存时间:" + ip.hop_limit);

                switch (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: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("----------------------------------------------");
            }
        }
    }
}
  1. 运行程序,分析结果。
五、实验结果
  1. 运行JpcapDumper.jar,观察Jpcap演示效果;

1.1 运行程序,显示抓包结果;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.2 选择获取结果中任一个,点击后即可在下方获取该IP包的详细信息;
在这里插入图片描述
1.3 查看本次实验的整体信息;
在这里插入图片描述
在这里插入图片描述
1.4 查看网络层协议图形信息;
在这里插入图片描述
在这里插入图片描述
1.5 查看连续的网络层协议图形统计信息;
在这里插入图片描述
在这里插入图片描述
1.6 通过Statistics功能可以查看更多的统计信息。

  1. 运行Intellij IDEA编写的抓包程序,获取结果如下所示:
    在这里插入图片描述
六、实验小结

  通过本次主要学会和了解了Jpacap的使用,加深了对IP包的熟悉程度,实验过程中要多多注意Jpcap.dll和Jpcap.jar包的版本问题,一个是32位还是64位,还要一个问题是要尽可能用最新版,一些老版本有部分方法不包含,比如我之前一直遇到报错java.lang.NoSuchMethodError: setPacketValue,导致getPacket一直获得结果为null,最后发现是Jpcap.jar包的问题,换了最新版就没问题了。
在这里插入图片描述

参考文章:【1】Jpcap获得网卡信息
     【2】安装配置Jpcap,使用jpcap抓包
     【3】Jpcap包的安装与配置
     【4】jovigb/jpcap-x64
     【5】jpcap实验中报错java.lang.NoSuchMethodError: setPacketValue,getPacket一直获得结果为null

  • 10
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: IP数据包捕获分析程序是一种网络工具,用于截获和分析通过网络传输的IP数据包。它可以在网络通信过程中实时捕获数据包,提供分析数据包内容和网络性能的功能。 首先,IP数据包捕获分析程序可以用于网络故障排查。通过捕获数据包,我们可以分析网络连接是否存在延迟、丢包、冲突等问题,进而定位故障原因。例如,我们可以检查数据包的源IP地址和目标IP地址,确定网络中的通信路径,并分析各路径上的延迟和丢包情况。 其次,IP数据包捕获分析程序也可以用于网络安全监测。通过捕获传输的数据包,我们可以对网络流量进行实时检测和分析,以发现可能的网络威胁或攻击行为。例如,我们可以分析数据包的源IP地址、目标IP地址以及传输的协议和端口,发现潜在的恶意流量,从而加强网络防御和安全策略。 此外,IP数据包捕获分析程序还可用于网络性能优化。通过分析数据包的网络延迟、丢包率、吞吐量等指标,我们可以评估网络性能,并发现网络瓶颈和改进的空间。例如,我们可以通过分析数据包的传输时延,确定网络中的瓶颈节点,并采取相应的措施提升网络带宽和优化路由选择。 综上所述,IP数据包捕获分析程序是一种重要的网络工具,它通过截获和分析数据包,帮助我们进行网络故障排查、网络安全监测和网络性能优化。在网络管理和维护中,它发挥着至关重要的作用。 ### 回答2: IP数据包捕获分析程序是一种用于捕获和分析网络数据包的工具。它可以在计算机网络中监控数据包的流动,并提供有关这些数据包的详细信息。 该程序通常由几个主要组件组成,包括捕获引擎、解析器和分析器。捕获引擎用于截取网络流量,并将捕获数据包传递给解析器。解析器将数据包中的原始二进制数据转换成易于理解的格式,并提取其中的关键信息,如源IP地址、目标IP地址、协议类型和数据大小等。分析器通过对这些信息进行统计和分析,揭示网络中的活动模式和问题。 IP数据包捕获分析程序的应用非常广泛。首先,它用于网络故障排除。管理员可以使用该程序捕获和分析网络流量,以查找导致网络故障的原因,并采取相应的措施进行修复。其次,它可以用于网络性能优化。通过分析数据包,并检测潜在的性能瓶颈,管理员可以对网络进行优化,以提高性能和响应速度。此外,该程序还可用于网络安全监控。它可以帮助管理员发现潜在的入侵行为、恶意软件传播和数据泄露等安全问题,并采取相应的防护措施。 总而言之,IP数据包捕获分析程序是一种强大的工具,用于监控、分析和解决计算机网络中的各种问题。它对于网络故障排除、性能优化和安全监控都起着重要的作用。 ### 回答3: IP数据包捕获分析程序是一种用来捕获和分析网络传输中的IP数据包的软件工具。它可以帮助用户监测和解决网络问题,以及分析网络流量和数据包传输状况。 首先,IP数据包捕获分析程序可以帮助用户捕获网络中的IP数据包。它通过监听网络接口,将经过该接口的数据包即时截获,并存储在本地设备中进行分析。通过捕获IP数据包,用户可以了解到网络流量的情况,包括源IP地址、目标IP地址、端口号、协议类型等。 其次,IP数据包捕获分析程序可以对捕获到的数据包进行分析。它可以根据用户设定的过滤条件,对捕获到的数据包进行筛选和过滤,以提供所需的信息。用户可以根据需要进行数据包的统计、排序和分类,以便更好地理解网络流量特点和数据传输情况。 此外,IP数据包捕获分析程序还可以帮助用户发现网络问题和故障。通过对捕获到的数据包进行深入分析,用户可以追踪和识别网络中存在的问题,如延迟、丢包、碰撞等。这对于网络管理员和技术人员来说尤为重要,因为它能帮助他们快速定位和解决网络故障。 总之,IP数据包捕获分析程序是一种功能强大的工具,它可以帮助用户捕获和分析网络中的IP数据包,了解网络流量和数据传输状况,并辅助用户解决网络问题和故障。对于网络管理和网络安全来说,它是一个不可或缺的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值