失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 计算机网络原理 实验3《IP数据包捕获及数据分析》

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

时间:2023-03-20 21:12:04

相关推荐

计算机网络原理 实验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数据包包含的信息。

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

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

四、实验步骤
阅读资料里提供的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类运行JpcapDumper演示Jpcap功能;利用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中,可以在此下载(/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 workInterface;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("----------------------------------------------");}}}}

运行程序,分析结果。

五、实验结果
运行JpcapDumper.jar,观察Jpcap演示效果;

1.1 运行程序,显示抓包结果;

1.2 选择获取结果中任一个,点击后即可在下方获取该IP包的详细信息;

1.3 查看本次实验的整体信息;

1.4 查看网络层协议图形信息;

1.5 查看连续的网络层协议图形统计信息;

1.6 通过Statistics功能可以查看更多的统计信息。

运行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

如果觉得《计算机网络原理 实验3《IP数据包捕获及数据分析》》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。