Jpcap获得网卡信息

本文介绍了如何利用Jpcap库在Java中获取Windows系统的网卡信息。通过JpcapCaptor和NetworkInterface类,可以捕获并显示网络接口的详细信息,包括名称、描述、数据链路层信息以及MAC地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在网络包的过滤
安装Wincap Jpcap
Winpcap(windows packet capture)是windows 平台下一个免费,公共的网络访问系统。开发 Winpcap 这个项目的目的在于为win32 应用程序提供访问网络底层的能力。它提供了以下的各项功能:
1) 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;
2) 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
3) 在网络上发送原始的数据报;
4) 收集网络通信过程中的统计信息。
Winpcap 的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报。也就是说,Winpcap 不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享

Jpcap :JAVA 语言虽然在TCP/UDP 传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。Jpcap 扩展包弥补了这一点。Jpcap 实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,Jpcap 调用
Winpcap/libpcap,而给 JAVA 语言提供一个公共的接口,从而实现了平台无关性
package com.cpsec.test;

import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.NetworkInterface;
import jpcap.NetworkInterfaceAddress;
import jpcap.PacketReceiver;
import jpcap.packet.Packet;

public class Test implements PacketReceiver,Runnable{
	
	
	public NetworkInterface[] devices;
	public NetworkInterfaceAddress addr;
	public static JpcapCaptor jCaptor;
	//public static ArrayList<FlowNode> flow=new ArrayList<FlowNode>();
	public static JpcapSender sender=null;

	public static Test T = new Test();
	public StringBuffer sb1 = new StringBuffer(); 
	public static boolean chooseMode=true;
	public static long time;
	public static long time1;
	public static long beginTime;
	public String s=new String();
	
	//返回设备列表
	public NetworkInterface[] getDevices() {
		devices = JpcapCaptor.getDeviceList();
		return devices;
		}
	
	public void desNetworkInterface() {
		byte[]b;
		sb1.append("---------------------------------------网卡信息-------------------------------------\n");
		sb1.append("总共有 " + devices.length + " 个网络设备接口\n"); 
		
		for (int i = 0; i < devices.length; i++) {
			sb1.append("\n设备接口" + i+ ":\n"); 
			sb1.append("网络接口名称:" + devices[i].name+"\n"); 
			sb1.append("网络接口描述:" + devices[i].description+"\n"); 
			sb1.append("数据链路层名称:" + devices[i].datalink_name+"\n");
			sb1.append("数据链路层描述:" + devices[i].datalink_description+"\n");
			sb1.append("是否是LOOPBACK设备:" + devices[i].loopback+"\n");
			sb1.append("MAC地址:"); 
			
			b =devices[i].mac_address;
				 for(int j=0;j < b.length;j++) {
						//由于toHexString输出时,遇到第一个是00000000字节时,输出16进制只有一个0,所以要添加个0。我机器是这样,不知道其他的
						if(j==0 && Integer.toHexString(b[0]&0xff).equals("0")) sb1.append(0);//字符串记得要用equals比较(忽略大小写的)
						if(j<b.length-1)sb1.append(Integer.toHexString(b[j]&0xff) .toUpperCase()+ ":"); //转换为十六进制,并且是大写
						else sb1.append(Integer.toHexString(b[j]&0xff) + " ");
				
					}
				 sb1.append("\n");
			}
		
		sb1.append("-----------------------------------------------------------------------------------"); 
		System.out.println(sb1);
		}
		
	@Override
	public void run() {
		T.devices = T.getDevices();
		T.desNetworkInterface();
		
	}

	@Override
	public void receivePacket(Packet arg0) {
		// TODO Auto-generated method stub
		
	}
	
	
	// ---------------------Main-------------------------------
		public static void main(String[] args) {
			Thread t = new Thread(new Test());
			t.start();
		}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值