jpcap
Posted heibaimao123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jpcap相关的知识,希望对你有一定的参考价值。
java自带的类库能够实现网络层及以上层次的编程,但是对于数据链路层无能为力。jpcap是一个能够帮助java程序实现对数据链路层操作的jar包。值得一提的是,jpcap是基于winpcap或者libpcap的,winpcap是windows系统的,而libpcap是linux系统的(包括ubuntu等衍生系统),jpcap是中间部件,通过调用winpcap/libpcap的方法实现对网卡的操作。java通过使用jpcap屏蔽了底层系统的差异。
- 通过jpcap,java程序能够直接获得网卡接收到的数据包。
- 可以设置网卡模式,进行抓包。
- 可以使用jpcap的方法对包的首部进行分析。
- 利用其他程序或自己编写方法可以实现解析还原抓到的包的数据部分。
- 通过jpcap,java程序可以发送自己设定参数的包(mac地址、ip地址、端口等)
- 通过对网卡收发包的统计和分析,监控网络环境
一台设备上可能不止一块网卡设备,而一块网卡上也可能不止一个网络接口
根据收发的方法不同,可以分为
- 无线网卡——使用WIFI信号通信
- 有线网卡——使用线缆连接通信
- 3/4/5G网卡——使用与手机相同的信号通信,依靠基站、卫星信号通信
同时,网卡又可分为实际网卡和虚拟网卡。一般来说,一台设备在同一时间只能使用一个网络接口,而我们要通过jpcap接收和发送数据包,就要确定正在使用的网络接口。
import jpcap.JpcapCaptor; import jpcap.NetworkInterface; public class test1 { public static void main(String[] args) { try{ //获取本机上的网络接口对象数组 final NetworkInterface[] devices = JpcapCaptor.getDeviceList(); for(int i=0;i<devices.length;i++){ NetworkInterface nc=devices[i]; //一块卡上可能有多个地址: String address=""; for(int t=0;t<nc.addresses.length;t++){ address+="|addresses["+t+"]: "+nc.addresses[t].address.toString(); } //打印说明: System.out.println("第"+i+"个接口:"+"|name: "+nc.name +"|loopback: "+nc.loopback+" address: "+address); } }catch(Exception ef){ ef.printStackTrace(); System.out.println("显示网络接口数据失败: "+ef); } } }
输出
第0个接口:|name: wlp2s0|loopback: false address: |addresses[0]: /10.40.13.44|addresses[1]: /fe80:0:0:0:8d5e:305c:5530:96e 第1个接口:|name: any|loopback: false address: 第2个接口:|name: lo|loopback: true address: |addresses[0]: /127.0.0.1|addresses[1]: /0:0:0:0:0:0:0:1 第3个接口:|name: enp3s0|loopback: false address: 第4个接口:|name: bluetooth0|loopback: false address: 第5个接口:|name: nflog|loopback: false address: 第6个接口:|name: nfqueue|loopback: false address: 第7个接口:|name: usbmon1|loopback: false address: 第8个接口:|name: usbmon2|loopback: false address:
我需要的就是devices[0]设备。
第二步,对选择的网络接口进行监听
JpcapCator.openDevice(NetworkInterface interface,insnaplen,boolean promisc,int to_ms);
第三步,捕获数据包
Packet packet = jpcap.getPacket();
第四步,分析数据包
以上是关于jpcap的主要内容,如果未能解决你的问题,请参考以下文章