文章目录

  • 1.Java网络编程的局限性
  • 2.相关使用技术介绍
    • 2.1.Java使用libpcap流程介绍
    • 2.2.libpcap/winpcap
    • 2.3.JNI
    • 2.4.jnetpcap
  • 3.环境安装
    • 3.1.操作系统
    • 3.2.安装winpcap
    • 3.3.maven/SpringBoot集成jnetpcap
      • 3.3.1.创建Maven或者SpringBoot项目
      • 3.3.2.引入jnetpcap依赖
    • 3.4.非maven集成jnetpcap
    • 3.5.安装jnetpcap函数库
  • 4.获取网卡

1.Java网络编程的局限性

首先我们先抛出一个问题,那就是Java怎么在网络层面进行编程?很多小伙伴肯定会说,Java不是有网络编程么?其实Java本身对网络编程是不够底层的,就如我们现在要进行抓包分析的话肯定是不够。因为Java本身所实现的网络编程是在应用层进行操作的,如果我们需要进行抓包的话,就需要深入到底层的协议去了。如下图中的各种协议,应用层之下的协议,在Java中可能就束手无策了。

2.相关使用技术介绍

2.1.Java使用libpcap流程介绍

本章节我们将使用Jnetpcap来进行学习,在此之前我们需要了解如下一个流程,我们Java本身是不支持直接使用libpcap,因此需要一个JNI技术来作为桥梁,使得我们Java语言可以调用C语言的库,然后jnetpcap中,然后是的Java使用jnetpcap进行开发的时候,直接使用Java方式就可以了,不用关心Java怎么集成JNI调用C语言库。

2.2.libpcap/winpcap

libpcap(Packet Capture Library)即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。

当前最流行的包嗅探和分析工具(tcpdump,Wireshark,Snort,nmap,ngrep等许多工具),都是基于libpcap函数库的。
而winpcap就是windows下的libpcap。

2.3.JNI

SUN公司发布的Java 本地接口(JNI)提供了将Java与C/C++、汇编等本地代码集成的方案,该规范使得在 Java 虚拟机内运行的 Java 代码能够与其它编程语言互相操作,包括创建本地方法、更新Java对象、调用Java方法,引用 Java类,捕捉和抛出异常等,也允许 Java代码调用 C/C++或汇编语言编写的程序和库。

因此,我们可以通过Java——》JNI——》libpcap的方式来调用C语言库。

2.4.jnetpcap

jNetPcap是 libpcap的一个Java完整封装。jNetPcap使 用与libpcap相同风格的API。libpcap是unix/linux平台下的网络数据包捕获函数库,大多数网络监控软件都以它为基础。 Libpcap可以在绝大多数类unix平台下工作。Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。

同时jnetpcap中,集成了JNI,因此在Java应用程序中,使用jnetpcap你就不需要在去额外使用jni了,就像你使用SpringBoot开发时,SpringBoot已经集成了tomcat。

目前版本jnetpcap-1.4.r1425-1g所支持的操作系统如下

3.环境安装

这里我们主要以windows环境进行搭建为主。我们需要如下几个步骤

3.1.操作系统

这一步至关重要,因为这将确定你的项目到底能不能做。
不管目前我们用什么技术,我们必须认识到一点,那就是我们不管做了什么集成或者封装,底层还是用libpcap,因此如果libpcap不支持我们的服务器环境的话,说啥都没用。

因为不同操作系统使用不同的C语言函数库,并不是所有的操作系统都支持的,如上文中提到的,支持X86芯片的windows系统,amd64芯片的linux等,但是限制不仅仅是操作系统,还有你的CPU处理芯片。这个需要你先确定好贵公司的服务器芯片。

一般公司来说,X86芯片和amd芯片居多,但是对于国产化要求高的企业单位,可能要求服务器是国产化的,因此可能使用一些龙芯,飞腾系列的芯片,则是不支持的。毕竟现阶段libpcap是不太可能去适配这些国产芯片的。

希望未来有一天我们的国产芯片能发展到让老外的软件及代码来适配我们的硬件基础设施。
希望未来能更多的企业投入到芯片的研究中,让中国芯片走向世界!

本人电脑X86芯片

系统为windows11专业版本

3.2.安装winpcap

具体安装winpcap这里我就不细说了,如果不知道winpcap从哪儿获取,最简单的方式就是安装一个wireshark,因为wireshark是基于winpcap的。

如果你的系统是linux,则你需要安装的是libpcap。

3.3.maven/SpringBoot集成jnetpcap

3.3.1.创建Maven或者SpringBoot项目

这里我们使用maven的方式进行环境集成,就不再使用导入jnetpcap.jar的方式进行集成了,毕竟网上到处的找包也不方便。当然你可以使用maven的方式集成了jnetpcap,然后在maven仓库中找到jnetpcap,导入到非maven项目中也可以。
这里我采用Spring tool sute进行开发
使用你的IDE创建一个maven项目或者SpringBoot项目

3.3.2.引入jnetpcap依赖

获取你需要jnetpcap依赖,如下我们使用的是目前
https://mvnrepository.com/artifact/jnetpcap/jnetpcap/1.4.r1425-1g

当然你也可以选择使用其他的版本,我们可以看到目前最新的版本是2018年1月进行更新的

我们单独引入jnetpcap是不够的,因为jnetpcap目前还没上传到maven仓库中,或许是因为我用的阿里云仓库,国际仓库是否有,这个不清楚。

     <!-- jnetpcap抓包 --><dependency><groupId>jnetpcap</groupId><artifactId>jnetpcap</artifactId><version>1.4.r1425-1g</version></dependency>
<!-- jnetpcap抓包的maven配置 --><repositories><repository><id>Clojars</id><name>Clojars</name><url>https://clojars.org/repo/</url></repository></repositories>

完整maven配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>jnetpcap_capture</artifactId><version>0.0.1-SNAPSHOT</version><name>jnetpcap_capture</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jnetpcap抓包 --><dependency><groupId>jnetpcap</groupId><artifactId>jnetpcap</artifactId><version>1.4.r1425-1g</version></dependency></dependencies><!-- jnetpcap抓包的maven配置 --><repositories><repository><id>Clojars</id><name>Clojars</name><url>https://clojars.org/repo/</url></repository></repositories><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3.4.非maven集成jnetpcap

非maven环境集成jnetpcap时,比较简单,其实就是找到jnetpcap包,然后将jnetpcap导入项目即可,但是存在一个问题,就是如果我们仅仅导入jnetpcap包,是不够的,因为我们还需要与这个依赖包保持版本的jnetpcap函数库,这块反正网上到处找也费劲。所以如果你的项目是非maven项目,这里建议你创建一个maven或者springBoot项目,然后用maven的方式集成,然后在maven仓库中去找jnetpcap包。这样有个好处,就是maven中集成进来的jnetpcap包中就包含了jnetpcap的函数库。

如果你不想折腾maven,那就来这儿下载吧

3.5.安装jnetpcap函数库

从哪里获取jnetpcap函数库函数库嗯?网上到处下载,反正够折腾人的,jnetpcap依赖有几个版本,然后函数库也有几个版本,各版本之间是不能混合用的。主要现在jnetpcap官网也打不开,不知道是不是要科学访问还是什么的,反正到目前位置也快3年没更新了。jnetpcap最后一版是2018年1月更新的(楼主目前时间2021年9月)

首先找到我们的通过maven集成的jnetpcap包依赖。
1.将windows系统中的X86芯片 64位系统的jnetpcap.dll拷贝出来,这就是函数库。


2.将函数库复制到jdk/bin目录下

至此,windows开发环境搭建完毕。

4.获取网卡

为了显示查看方便,我们先把其他不用的网卡给禁用掉

然后在cmd中,输入ipconfig /all查看我们的网卡信息

然后我们用代码的方式来获取我们的网卡信息,和上面我们的网卡信息做对比。

import java.util.ArrayList;
import java.util.List;import org.jnetpcap.Pcap;
import org.jnetpcap.PcapIf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class JnetApp {public static void main(String[] args) {SpringApplication.run(JnetApp.class, args);List<PcapIf> devs = new ArrayList<PcapIf>();StringBuilder errsb = new StringBuilder();int r = Pcap.findAllDevs(devs, errsb);if (r == Pcap.NOT_OK || devs.isEmpty()) {System.err.println("未获取到网卡");} else {System.out.println("获取到网卡:");System.out.println(devs);}}
}
获取到网卡:
[<flags=0, addresses=[[addr=[INET4:192.168.1.233], mask=[INET4:255.255.255.0], broadcast=[INET4:255.255.255.255], dstaddr=null], [addr=[INET6:FE80:0000:0000:0000:A069:D7CC:E18D:CEE1], mask=[0], broadcast=[0], dstaddr=null]], name=\Device\NPF_{BE377809-60C5-49AD-A224-0F6C3B355EFB}, desc=Intel(R) Ethernet Connection (2) I219-LM>]


刚开始的时候我电脑是正常运行的,然后系统自动更新以后,就发现获取不到网卡,然后以管理员启动IDE在运行代码时,就能成功了。因此这里,防止权限不够的情况,建议以管理员方式启动。
至此,本章节结束!

Java抓包分析一(基于jnetpcap进行抓包)——抓包环境搭建,获取网卡相关推荐

  1. #大数据技术#基于python的hadoop(单机)环境搭建及使用

    基于python的hadoop(单机)环境搭建及使用 0.写在前面 1.虚拟机安装centos6.5 1.1安装流程 1.1.1系统安装 1.1.2修改静态ip(超级用户) 1.1.3更换可用源(超级 ...

  2. 基于Eclipse平台的Android OpenCV开发环境搭建

    基于Eclipse平台的Android OpenCV开发环境搭建 作者:雨水, 日期:2016-1-31,CSDN博客:http://blog.csdn.net/gobitan 摘要:本文主要记录了如 ...

  3. Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建

    Ubuntu下基于 Cilium CNI 的 Kubernetus集群环境搭建 1. 前言 2. 安装三个Ubuntu 2.1 三个机器都关闭防火墙 2.2 三个机器都关闭swap 2.3 三个机器都 ...

  4. 基于Spark的机器学习实践 (三) - 实战环境搭建

    0 相关源码 1 Spark环境安装 ◆ Spark 由scala语言编写,提供多种语言接口,需要JVM ◆ 官方为我们提供了Spark 编译好的版本,可以不必进行手动编译 ◆ Spark安装不难,配 ...

  5. 基于Codeblock的LVGL模拟器Windows平台环境搭建[带源码]

    基于Codeblock的LVGL模拟器Windows平台环境搭建 文章目录 基于Codeblock的LVGL模拟器Windows平台环境搭建 概述 一.介绍 二.使用CodeBlock版本方法以及需要 ...

  6. 【Linux集群基础环境搭建】基于虚拟机的多节点Linux网络环境搭建(超详细)

    基于VMWare虚拟机的多节点Linux网络环境搭建 一.使用工具 二.方案设计 三.实现过程 1.安装VMWare虚拟机软件 2. 创建虚拟机节点controller并安装CentOS 3. 通过节 ...

  7. 计算机网络个人项目设计:java实现,基于Jnetpcap的网络嗅探抓取,发送数据包单机程序(模仿wireshark)

    开发环境 java javaFX(fxml加控制器的那种,用到图形化的JavaFX Scene Builder设计界面) 用到封装好的jar包:Jnetpcap,需安装winpcap idea开发 基 ...

  8. 基于linux的netfilter处理数据包的过程分析,基于Linux的Netfilter处理数据包的过程分析...

    基于Linux的Netfilter处理数据包的过程分析 防火墙技术在保护网络安全方面的作用越来越明显.相比较window,Linux有更好的网络性能,因此基于Linux的Netfilter技术 (本文 ...

  9. 基于ARCGIS二次开发可视化开发环境搭建(JAVA)

    这两天为了搭建这么一个基于java的ArcGIS二次开发环境可着实花了一番心血.在网上搜索各种资料,大部分都是基于C#的,关于JAVA的很少,而且很杂乱,没有一个完整的.详细的.适合新手的这么一个教程 ...

  10. irule jar包无法导入_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...

    框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...

最新文章

  1. hadoop程序MapReduce之SingletonTableJoin
  2. 爬虫系列之----Requests库
  3. TensorFlow 人脸识别实验 ImportError: No module named 'sklearn.model_selection'
  4. 世界上最稳定的系统——维稳就靠它了!
  5. (十三)RabbitMQ使用详解
  6. 七步从Angular.JS菜鸟到专家(2):Scopes
  7. 十分钟完成的操作系统
  8. VCGLib中邻接关系的实现
  9. MATLAB R2022a for Mac(专业编程和数学计算软件)
  10. mysql存储过程模糊查询_vb.net 使用存储过程进行模糊查询的教程
  11. java商城系统设计-----积分商城系统
  12. 华为网络技术比赛-云平台课件笔记
  13. 解决macOS idea启动web服务dock回自动打开Java图标
  14. 20个开源的工业设计软件
  15. Android 自定义viewGroup实现淘宝二楼及处理多指触控事件
  16. 算是目前PAYPAL最全最完整的开发方式了
  17. CodeCraft-20 (Div. 2) E. Team Building(状压dp)
  18. Linux遇到Aborted (core dumped)
  19. 下载神器Aria2 + WebUI-Aria2 + 接管Chrome下载任务
  20. linux加载的驱动无法卸载,linux驱动加载后不能再卸载

热门文章

  1. java中怎么复制集合_Java中List集合间的复制
  2. 上海大学计算机学院领军人物,上海大学计算机工程与科学学院研究生导师简介-谢 江高级工程师...
  3. HTML设置文字的格式
  4. spss标准差与标准偏差不一样
  5. LCD点阵液晶多级菜单设计
  6. mysql的临时表空间_Mysql临时表空间详解
  7. 实验室设备管理系统C语言——课程设计实习
  8. Shine Effect
  9. 谈谈自信,为什么自信是成功的第一秘诀?
  10. ef 数据迁移mysql_ef数据库迁移