标签:ip地址 地址 bool 链路层 设备 [1] 无线 inux main
java自带的类库能够实现网络层及以上层次的编程,但是对于数据链路层无能为力。jpcap是一个能够帮助java程序实现对数据链路层操作的jar包。值得一提的是,jpcap是基于winpcap或者libpcap的,winpcap是windows系统的,而libpcap是linux系统的(包括ubuntu等衍生系统),jpcap是中间部件,通过调用winpcap/libpcap的方法实现对网卡的操作。java通过使用jpcap屏蔽了底层系统的差异。
一台设备上可能不止一块网卡设备,而一块网卡上也可能不止一个网络接口
根据收发的方法不同,可以分为
同时,网卡又可分为实际网卡和虚拟网卡。一般来说,一台设备在同一时间只能使用一个网络接口,而我们要通过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+"\r\naddress: "+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();
第四步,分析数据包
标签:ip地址 地址 bool 链路层 设备 [1] 无线 inux main
原文地址:https://www.cnblogs.com/heibaimao123/p/9867748.html