在Java中使用 JnetPcap 进行数据包捕获
什么是 JnetPcap?
- JnetPcap 是一个开源Java库。
- 它是所有 libpcap 库本地调用的Java包装器。
- 它可用于捕获实时和离线数据。
- 解码数据包是 Jnetpcap 的一个特殊功能。
- 为了处理数据包,您需要可以使用 Wireshark 生成的 pcap 文件。
JNETPCAP 安装步骤:
- 对于 Windows:(x64)
- 下载并安装适用于 Windows 64 位的最新稳定版 JRE 和 JDK。
- 下载并安装适用于 Windows 64 位的最新稳定版 Eclipse。
- 从 http://jnetpcap.com/download 下载 jNetPcap 的稳定版本(用于 64 位 Windows)。
- 提取 .rar 文件。
- 解压后,将其数据链接库(jnetpcap.dll)复制到具有管理权限的system32文件夹中。
- 现在打开 Eclipse,创建项目。右键单击项目,转到属性,转到Java build
路径,单击 Add External jars 并提供 jnetpcap.jar 的路径。
- 编写程序并运行。
- 对于 Linux:(x64)
- 首选 Ubuntu 14.04 或 16, .04(稳定版)。它包含Java作为操作系统安装的默认值。
- 安装 eclipse-full,如果找不到,它将自动安装最新支持的Java 。 (从命令行或软件中心)
- 安装 g++ 和 libpcap-dev (从命令行安装,因为它不会出现在软件中心,如果它
不是更新的)。 - 从 http://jnetpcap.com/download 下载 jNetPcap 的稳定版本(用于 64 位 Linux)。
- 提取 .rar 文件。
- 解压后,将 libjnetpcap.so 和 libjnetpcap-pcap100.so 复制到 /usr/lib/(作为 sudo)。
- 现在打开 Eclipse,创建项目。右键单击项目,转到属性,转到Java build
路径,单击 Add External jars 并提供 jnetpcap.jar 的路径。 - 编写程序并运行。
什么是 .pcap 文件?
Pcap 代表数据包捕获。它用于捕获网络流量。这些 pcap 文件可以被 tcpdump、wireshark 等应用程序读取
Input: In this program, we will pass the folder name having pcap file as input.
Output: The program will count the total number of packets in each pcap file.
首先,我们将使用wireshark从实时网络生成三个pcap文件
从上面的截图中,我们可以看到我们在 abc 文件夹中有 3 个 pcap 文件。
打开这些 pcap 文件,我们可以看到:
- 3.pcap
Total number of packets inside 3.pcap = 2330
- 2.pcap
Total number of packets inside 2.pcap = 3361
- 1.pcap
Total number of packets inside 1.pcap = 502
现在让我们在任何 IDE 中使用Java部署上述方法:
源代码
// Counting the number of packets in pcap files.
// User defined package
package jnt;
import java.io.File;
import org.jnetpcap.Pcap;
import org.jnetpcap.packet.JPacket;
import org.jnetpcap.packet.JPacketHandler;
public class PacketCounter {
// Path of the folder having pcap files
// generated by Wireshark(change accordingly)
static String folderpath
= "/home/folder_where_you_have_pcap_files";
static double count = 0;
static double globalcount = 0;
// main function starts here
public static void main(String[] args)
{
// Making the object of a file
// and giving that object address
// of the pcap folder
File file = new File(folderpath);
// Making file array which is used
// to access each file
// inside the folder one-by-one
File[] files = file.listFiles();
// Accessing each file
// one-by-one of files array
for (File f : files) {
// Getting each pcap file name
String FILENAME
= folderpath + f.getName();
// StringBuilder is used to get
// error messages in case
// if any error occurs
StringBuilder errbuf = new StringBuilder();
// Making Pcap object an opening pcap file
// in offline mode and passing pcap filename
// and StringBuilder object to the function
Pcap pcap = Pcap.openOffline(FILENAME, errbuf);
// Here pcap object is used to start a loop
// for capturing each packet of an
// each pcap file(as a pcap file can
// have many packets) one at a time, here -1
// indicates eof(end of file) i.e
// until every packet is captured execute the
// loop, we can also give some value
// instead of -1 which will indicate the
// number of packets to execute
// in each pcap file
pcap.loop(-1, new JPacketHandler() {
// nextPacket is override function
// of JPacketHandler( Handler which is
// use to receive fully decoded packets)
public void nextPacket(JPacket packet,
StringBuilder errbuf)
{
// counter to count the number of packet
// in each pcap file
count++;
}
}, errbuf);
System.out.println("File : " + f.getName()
+ " Number of Packets : "
+ count);
// Global counter to count the total number
// of packets in all pcap file
globalcount = globalcount + count;
count = 0;
}
System.out.println("Total Packets in folder : "
+ globalcount);
}
}
输出:
First Example:
Input: “/home/abc/”(Folder’s name hardcoded in the program)
Output: File : 1.pcap Number of Packets : 502.0
File : 3.pcap Number of Packets : 2330.0
File : 2.pcap Number of Packets : 3361.0
Total Packets in folder : 6193.0
Second Example:
Input: “/home/abc/”(Folder’s name hardcoded in the program)
Output: File : tcp.pcap Number of Packets : 10.0
File : http11.pcap Number of Packets : 9.0
File : to_be_evaluated.pcap Number of Packets : 100.0
File : abcd.pcapng Number of Packets : 2.0
File : ACKStormAttack.pcap Number of Packets : 63.0
Total Packets in folder : 184.0