基于jpcap实现的网络嗅探器

项目功能

基于jpcap实现的网络嗅探器,项目主要主要功能为网络抓包,可以抓取5层协议的数据包,包括TCP、UDP、ICMP、IP、ARP等常见协议, 并支持按照协议、源IP、目的IP或关键字对抓取的包筛选。项目另外实现了基于Java Swing的GUI,便于操作。

为了使原项目正常运行,PacketAnalyze.java的analyzeARPPacket()方法需要修改

private Map<String, String> analyzeARPPacket() {ARPPacket arpPacket = (ARPPacket) packet;// 将 packet类转成 ARPPacket类;return new HashMap<String, String>() {{put("硬件类型", String.valueOf(arpPacket.hardtype));put("协议类型", "ARP");put("操作字段", String.valueOf(arpPacket.operation));// put("IP首部", arpPacket.toString());// String toString: 返回描述此数据包的字符串;put("发送方硬件地址", String.valueOf(arpPacket.getSenderHardwareAddress()));put("接收方硬件地址", String.valueOf(arpPacket.getTargetHardwareAddress()));put("源IP",  String.valueOf(arpPacket.getSenderProtocolAddress()));put("目的IP", String.valueOf(arpPacket.getTargetProtocolAddress()));}};
}

更新日志

更新 PacketAnalyze.java,
解决编译时的Exception in thread “Thread-2” java.lang.ClassCastException: class java.net.Inet4Address cannot be cast to class java.lang.String (java.net.Inet4Address and java.lang.String are in module java.base of loader ‘bootstrap’)的报错信息。

项目地址

https://github.com/wsixsix/sniffer

相关说明
运行时问题
抓包抓多了的时候就会像这样报错,说已经打开255个设备, java.10.I0Exception Create at jpcap.Jpcapcaptor.(JpcapCapton.java:34) at jpcap.Jpcapcaptor.openDevice(Jpcapcaptor.java:67) at src.controll.PacketCapture.run(PacketCapture.java:96)

相关知识点
首先JpcapCaptor.openDevice是Jpcap库中的一个方法,用于打开网络接口设备(即网卡设备)。使用此方法可以获取到网络接口的实例,以便进一步进行网络数据包的捕获和分析。

以下是使用JpcapCaptor.openDevice方法的一般步骤:

获取网络接口列表:首先,你需要获取本机的网络接口列表。这可以通过Jpcap提供的JpcapCaptor.getDeviceList()方法完成。该方法返回一组NetworkInterface对象,每个对象包含了对应网络接口的一些信息,如名称、描述、IP地址、MAC地址以及数据链路层名称和描述。

选择要打开的网络接口:从获取到的网络接口列表中,选择你想要打开的网络接口。这通常基于你的需求,例如,你可能想要选择连接到外部网络的接口。

打开网络接口:使用JpcapCaptor.openDevice()方法打开选择的网络接口。该方法需要几个参数,包括你想要打开的网卡设备实例、数据包的最大捕获长度、是否开启混杂模式以及抓包的超时时间。混杂模式允许你的程序捕获到所有经过网络接口的数据包,而不仅仅是那些目的地址是本机的数据包。

以下是JpcapCaptor.openDevice方法的一个示例代码片段:

java NetworkInterface[] devices = JpcapCaptor.getDeviceList(); // 获取网络接口列表
int index = // 设置你想要打开的网卡设备的索引;
JpcapCaptor captor = JpcapCaptor.openDevice(devices[index], 65535, false, 20); // 打开网络接口设备 在上述代码中,devices[index]是你想要打开的网络接口设备实例,65535是数据包的最大捕获长度(这里设置为最大值),false表示不开启混杂模式,20是抓包的超时时间(单位为毫秒)。

通常意味着在尝试打开网络接口时,系统已经达到了允许同时打开的网络设备数量的上限。在大多数操作系统中,同时打开的网络设备数量是有限制的,而这个限制通常是为了避免资源耗尽或系统不稳定。

解决方法
要解决这个问题,你可以尝试以下几种方法:

1.关闭其他程序:确保没有其他程序(如其他网络监控工具或VPN软件)正在使用或占用网络接口。关闭这些程序后,尝试再次使用JpcapCaptor.openDevice打开网络接口。

2.重启计算机:有时,简单地重启计算机可以释放被占用的网络接口资源。重启后,再次尝试打开网络接口。

3.检查代码中的错误:确保你的代码中没有重复打开同一个网络接口的情况。每次调用JpcapCaptor.openDevice后,都应该相应地调用captor.close()来关闭接口,以避免资源泄露。

4.检查权限问题:在某些情况下,没有足够的权限可能导致无法打开网络接口。确保你的程序以管理员或具有足够权限的用户身份运行。

5.减少同时打开的网络接口数量:如果你的程序需要同时监控多个网络接口,尝试减少同时打开的网络接口数量。你可以设计一种策略,比如按顺序打开和关闭接口,或者只打开必要的接口。

6.更新或替换库:如果上述方法都不奏效,可能是你使用的Jpcap库版本存在兼容性问题或已知bug。考虑更新到最新版本的Jpcap,或者寻找其他网络包捕获库作为替代,比如Pcap4J或WinPcap/Npcap。

7.检查系统限制:某些操作系统对可以同时打开的网络接口数量有严格的限制。你可以通过查看操作系统的文档或联系技术支持来了解这些限制,并尝试调整系统设置以允许打开更多的网络接口。

8.检查硬件问题:在某些情况下,网络接口硬件本身的问题也可能导致无法打开设备。检查网络接口卡(NIC)是否正常工作,或者尝试使用不同的网络接口。

参考资料

1.参考sniffer项目:https://github.com/su001018/sniffer
2.参考Jpcap JAVA捕捉并分析网络数据包 https://blog.csdn.net/arjick/article/details/4525474
3.参考JpcapManager源码 http://code.google.com/p/ken-javaframeword/source/browse/trunk/JavaFramework2.0/src/com/shine/framework/Jpcap/JpcapManager.java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI--向量的存储和检索

step1 Document LangChain 实现了Document抽象&#xff0c;旨在表示文本单元和相关元数据。它具有两个属性&#xff1a; page_content&#xff1a;代表内容的字符串&#xff1b;metadata&#xff1a;包含任意元数据的字典。 该metadata属性可以捕获有关文档来源、其与其他文…

pl/sql基础语法操作

oracle pl/sql语言&#xff08;procedural language/sql&#xff09;是结合了结构化查询与oracle自身过程控制为一体的强大语言。 语法执行块 语法结构&#xff1a; [ declare 可选 声明变量部分--declaration statements (1);]begin --执行部分--executable statements (2)…

CentOS-9配置静态IP地址

查看配置命令nmcli CentOS 9 使用 nmcli 命令行工具进行网络配置。以下是配置静态 IP 地址的步骤和示例代码&#xff1a;相对以前centos7之类的&#xff0c;9版本的默认的网络是NetworkManager&#xff0c;网络配置也有较大改变 nmcli con show用vim进行编辑配文件 cd /etc/…

SSL证书有效期缩短有影响吗?

SSL证书是一种用于加密网络通信的安全协议&#xff0c;它可以确保用户在访问网站时&#xff0c;数据传输过程中不会被第三方恶意窃取或篡改。SSL证书通常都有一个有效期限&#xff0c;该期限可以长达几年。然而&#xff0c;最近一些SSL证书颁发机构开始缩短证书的有效期限&…

JavaScript基础(九)

冒泡排序 用例子比较好理解: var arry[7,2,6,3,4,1,8]; //拿出第一位数7和后面依次比较&#xff0c;遇到大的8就换位&#xff0c;8再与后面依次比较&#xff0c;没有能和8换位的数&#xff0c;再从下一位2依次与下面的数比较。 console.log(排列之前&#xff1a;arry); for (…

AWS迁移与传输之SCT

AWS Schema Conversion Tool&#xff08;AWS SCT&#xff09;是一款用于数据库迁移的工具&#xff0c;旨在帮助用户将现有的数据库模式&#xff08;包括表、视图、存储过程等&#xff09;从一个数据库引擎转换到另一个数据库引擎。 AWS提供两种模式转换解决方案&#xff0c;使…

开源大模型与闭源大模型:技术哲学的较量

目录 前言一、 开源大模型的优势1. 社区支持与合作1.1 全球协作网络1.2 快速迭代与创新1.3 共享最佳实践 2. 透明性与可信赖性2.1 审计与验证2.2 减少偏见与错误2.3 安全性提升 3. 低成本与易访问性3.1 降低研发成本3.2 易于定制化3.3 教育资源丰富 4. 促进标准化5. 推动技术进…

Web测试面试题(二)

一&#xff1a;简述HTTP协议的状态码包含哪些&#xff1f; 2XX&#xff0c;表示成功 3XX&#xff0c;表示重定向 4XX&#xff0c;表示客户端错误 5XX&#xff0c;表示服务器错误 二&#xff1a;HTTP和HTTPS的区别&#xff1f; 《1》安全性上的区别&#xff1a; HTTPS&#x…

AWS 信息资料

EKS 组件信息&#xff1a;Amazon EKS 附加组件 - Amazon EKS&#xff0c;主要用于程序管理插件。 AWS 区域和可用区信息&#xff1a;全球基础设施区域和可用区 如何解决创建 Amazon S3 桶时出现的错误:如何解决创建 Amazon S3 桶时出现的错误 创建 AWS EC2 实例时 userdata使…

LeetCode题解:9. 回文数,翻转一半数字,JavaScript,详细注释

原题链接 9. 回文数 解题思路 翻转数字 利用循环&#xff0c;每次将x右移一位将移出的数字存储到reversed的个位中每次存储前&#xff0c;需要将reversed左移一位 判断结果 当原x的长度为偶数&#xff0c;翻转后的结果相等当原x的长度为奇数&#xff0c;reversed一定比翻转后…

自养号测评是什么?亚马逊产品评价的全新策略

1、什么是亚马逊测评&#xff1a; 亚马逊测评&#xff0c;简而言之&#xff0c;是基于亚马逊购物平台的一种特定活动。他的核心在于模拟国外消费者的购物行为&#xff0c;并在完成购买后&#xff0c;对所获得的产品进行真实、中肯的评价。这种测评不仅为消费者提供了购物参考&…

微软开发者大会,Copilot Agents发布,掀起新一轮生产力革命!

把AI融入生产力工具的未来会是什么样&#xff1f;微软今天给出了蓝图。 今天凌晨&#xff0c;微软召开了Microsoft Build 2024 开发者大会&#xff0c;同前两天的Google I/O开发者大会一样&#xff0c;本次大会的核心词还是“AI”&#xff0c;其中最主要的内容是最新的Copilot…

成都爱尔胡建斌院长提醒近视超过600度,记得每年检查眼底!

高度近视是指近视度数在600度及以上的一种屈光不正的状态。 近视的眼睛必定是变形的。在正常情况下&#xff0c;人的眼球类似球体&#xff0c;但随着近视加深&#xff0c;眼轴变长&#xff0c;眼球体积逐渐增大&#xff0c;整个眼球从圆球型向椭圆球形发展&#xff0c;而眼球壁…

Linux:top命令的每一列的具体含义

Linux&#xff1a;top命令的每一列的具体含义 文章目录 Linux&#xff1a;top命令的每一列的具体含义图片显示top命令的概念语法显示字段的含义顶部字段第二行第三行第四行第五行每列字段的含义 图片显示 top命令的概念 top命令上一个常用的Linux命令行工具&#xff0c;用于实…

php部分特性漏洞学习

php部分函数漏洞学习 简单总结一些我遇到的ctf中的php的一些函数或特性的漏洞&#xff0c;我刷题还是太少了&#xff0c;所以很多例子来自ctfshow&#xff0c;以后遇到相关赛题再更新 1.MD5和其他hash 弱类型比较 php中&#xff0c;有两中判断相等的符号&#xff0c;和&…

位运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 位运算符是把数字看作二进制数来进行计算的&#xff0c;因此&#xff0c;需要先将要执行运算的数据转换为二进制&#xff0c;然后才能进行执行运算。…

确保数据可视化的准确性:后校验的重要性和方法

前言 在数据可视化项目中&#xff0c;选择合适的图表类型并确定数据字段是首要步骤&#xff0c;但这些步骤本身并不能保证最终的图表能够有效地传达正确的信息。数据的质量和特性可能会影响图表的解释性和准确性。因此&#xff0c;进行后校验以确保数据的适用性和一致性对于避…

[建堆堆排序的时间复杂度推导]向上建堆向下建堆堆排序的时间复杂度分析推导

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到动画详解数据结构系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

ai电销机器人智能的原理和优势,如何帮助企业来提高销售效率的?

随着人工智能技术的发展&#xff0c;越来越多的企业开始选择使用ai智能外呼系统替代传统的人工拨打电话模式&#xff01;通过精准语音平台群呼潜在客户群体&#xff0c;精准筛选出意向客户并进行分类&#xff0c;实现无缝对接&#xff0c;节省80%人力成本&#xff0c;电销机器人…

hypermesh二次开发tcl脚本

hypermesh二次开发tcl脚本 1、tcl读csv文件,得到list,再转成二维数组2、tcl写csv文件3、hypermesh tcl根据读入的节点坐标建节点, 再显示节点号4、hypermesh tcl根据节点号建节点set5、hypermesh tcl根据节点set读取节点号&#xff0c;再根据节点号读取节点坐标&#xff0c;再将…