基于Jnetpcap的网络嗅探抓、发送包程序

开发环境

java
javaFX(fxml加控制器的那种)
用到封装好的jar包:Jnetpcap,需安装winpcap
idea开发

基本功能及效果

扫描网卡
分析包头
GUI窗口
接收和发送包
基于Jnetpcap的网络嗅探抓、发送包程序
基于Jnetpcap的网络嗅探抓、发送包程序


接下来是我机翻的自己写的的英文report并截取了一部分较有用的。
并且插入一些学习链接。
文末有 程序,可用的jnetpcap 32位和64位的jar包和API文档和report。in 1pkg


引言

该程序基于JnetPcap,是指著名的软件包捕获软件Wireshark。它是捕获软件包的一种实现,这些软件包通过选择的网络接口卡传递,并发送任何软件包输入。我选择了许多最有用的功能,例如以太网MAC,IP4地址,端口,并直接在Javafx编码的简洁漂亮的UI中显示它们。而且,可以执行通过NIC发送带有我们输入的所有内容的契约。该项目还利用了多个线程,以确保一切顺利且同时运行。

理论

参考链接
jnetpcap简介
手动制图:基于Jnetpcap的网络嗅探抓、发送包程序

协议和层以及配置环境

a)WinPcap
公认Windows环境中用于链路层网络访问的行业标准工具,只需下载安装程序并运行即可。
b)JnetPcap
Java平台不提供较低级别的访问权限,因此我们需要特殊的SDK来提供帮助。
JnetPcap是Sly Technologies生产的一种广泛使用的开源SDK。它使用Java本机接口封装Libpcap,WinPcap等。这样,通过JnetPcap,我们可以处理从帧头到实际数据的整个程序包。
要安装JnetPcap,我们需要:首先,将JnetPcap.dll放在系统环境中的Java.library.path下。然后将jar导入我们的项目依赖项。
我们必须注意的是,Jnetpcap的版本(dll和jar)都必须与Java版本相对应:32位或64位,否则我们将无法正确使用Jnetpcap。

jnetpcap配置链接

项目结构

我将整个项目分为三个级别:数据,服务,视图。这符合设计模式。
基于Jnetpcap的网络嗅探抓、发送包程序
思路参考 我只参考了他的MVC结构图,而且还不太一样,但是值得一看。

i。服务层:
1.解析器
解析器将原始程序包拆分为我们需要的部分。我主要在JnetPcap中调用该接口。由于时间有限,我选择了最常用的协议:Frame + Ethernet + IP4 / 6 + TCP / UDP + Data(+ Http)。IP源分离如图:
基于Jnetpcap的网络嗅探抓、发送包程序
分割和格式化的数据暂时存储在解析器中,等待使用。

2.运行器
Runner具有扫描NIC端口并获取设备信息并将信息存储到公共位置的功能,我将在后面解释。
运行时,Runner最初设置端口,并且使用混杂模式和超时(这是等待新程序包的最大时间限制)。然后,它打开一个端口供使用。我们有一个内部类jpacketHandler,它覆盖了nextPacket函数供循环使用,该循环是JnetPcap内部的一个函数,当每次使用不可更改的循环函数时,都会将jpacketHandler作为参数传递。
基于Jnetpcap的网络嗅探抓、发送包程序
在内部jpackethandler中,覆盖功能将更新静态解析器并根据新鲜的解析器创建一个新的记录对象,然后将此记录追加到列表中,以刷新我们的ui场景。
坑:我定义了一个包括旧循环的新循环,该循环一旦使用就设置一次或多次。这样做的原因是我们必须等待片刻而不是保持刷新数据,而不是一直循环,否则写入和读取的不对称会导致错误。
3.发送器
在发送方中,我打开了另一个端口,如果与同一设备进行处理,则与运行程序同时运行时不会导致错误。
首先,创建一个默认的帧头,然后创建一个字节类型的数组,这是我们在帧上方的数据,根据协议,我们可以通过如右图所示按位设置来生成所需的任何数据包。该数组的长度应与创建帧头时使用的参数相同,该参数指示数据部分的长度。
将头和数据合并后,应将整个打包的软件包放入发送队列,然后发送或添加更多要发送的软件包。这次,如果发送方和运行方位于同一NIC,则运行方可以看到已发送的数据包。
基于Jnetpcap的网络嗅探抓、发送包程序
ii。数据层
1.普通
作为解析器,公共类是静态的,这意味着我们只有一个公共类。通用类维护总体数据,例如NIC范围,消息,场景中显示的列表等。解析器和运行器刷新列表中的记录,而javaFX场景的控制器维护用户的输入,例如,要使用的设备编号。
更重要的是,它保持并行运行的线程ID。而且我们内部有一堆控制线程的方法,以确保它们正确运行和结束。
基于Jnetpcap的网络嗅探抓、发送包程序
2.记录
在内部记录中,数据结构与直接在场景中显示的表中的数据结构完全对应,并且提供了表中显示的最终数据,因此在初始化时会修改某些数据。

iii。查看层
1.主要场景
主场景的控制器在初始化时会更新NIC信息,并继续监听事件。单击开始按钮后,将创建一个新线程来运行运行程序,并继续捕获程序包。同时,还创建了另一个线程,该线程不断刷新显示给用户的表。我们可以随时启动和停止。
当单击另一个按钮时,将创建发送者的新阶段,该阶段在运行时也是独立的,这意味着用户可以同时捕获和发送。
2.发件人场景
这部分将控制发送契约,该契约被设计为对象和线程。我们可以同时发送许多内容,以后的内容将保留并在系统中等待。
我还设置了一个100000次循环演示的演示。

运行

收发都需要先设置有效网卡序号,然后收发,发的部分只有example。没有做输入收发。
由于对任何输入的异常处理得到了广泛使用,以及多线程,

只要不是疯狂点击,都可以正常运行。

基于Jnetpcap的网络嗅探抓、发送包程序
单击“发送示例100000次”后的捕获窗口部分

Jnetpcap官方样例整理

整理的别人的文章。 值得参考

CSDN下载

下载(待审核)

GitHub

https://github.com/FrankYJY/Little-Package-Catcher

有用的话给颗星星否?

GitHub:如果您可以添加更多功能,欢迎成为我的合作者。如果您符合后述条件(确实做了一些事情),则可以在此程序的基础上提交您的工作。否则,它仅供一般学习和参考。
G.未来工作
a)更多协议
可以解析和分析许多协议,例如ARP,ICMP和许多更高级别的网络。
b)功能复杂
可以执行许多更高级别的应用程序,如统计,分析。
c)专业用法
由于我们可以制作和发送任何程序包,因此可以进行任何使用和攻击。最容易使用的可能是伪造的UDP软件包攻击。一旦我们设置了目标IP,并向其发送了伪造的随机程序包,它将被折叠并且受害者无法找到我们的地址或任何有用的信息。