Jpcap获得网卡信息

来源:互联网 发布:真人网络赌钱平台 编辑:程序博客网 时间:2024/06/11 00:58
最近在网络包的过滤
安装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);}@Overridepublic void run() {T.devices = T.getDevices();T.desNetworkInterface();}@Overridepublic void receivePacket(Packet arg0) {// TODO Auto-generated method stub}// ---------------------Main-------------------------------public static void main(String[] args) {Thread t = new Thread(new Test());t.start();}}

原创粉丝点击