Java网卡监控

来源:互联网 发布:网络玄幻小说经典语录 编辑:程序博客网 时间:2024/06/01 08:16

1.到网上下载JPcap,下载地址是:http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html

2.由于JPcap运行时依赖WinCap的类库,所以,也必须在本机下载安装WinCap,下载地址是:http://www.winpcap.org

3.配置JPcap的路径:把Jpcap文件夹下lib文件夹里的JPcap.dll文件复制到你机器JDK文件夹下jre下的bin目录中,(例如:C:\Program Files\Java\jdk17.0_10\jre\bin下)然后把JPcap文件夹下lib文件夹里的jpcap.jar复制到你机器JDk文件夹下jre-->lib--->ext目录下(例如:C:\Program Files\Java\jdk1.7.0_10\jre\lib\ext)

4、配置elicpse中jre环境,选择window-->preference-->java--->installed jres,然后在installed jres中选择jpcap.jar加入进来。

5、编写测试代码

package com.test.util;


import java.util.ArrayList;
import java.util.List;


import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import jpcap.packet.UDPPacket;


public class TestJpcap {
public static void main(String[] args) {
try {
/*-------------第一步绑定网络设备--------------------*/
NetworkInterface[] devices = JpcapCaptor.getDeviceList(); // 返回一个网络设备列表
int caplen = 600;
boolean promiscCheck = false;
// caplen限制每一次收到一个数据包,只提取该数据包中前多少字节
// Promisc:设置是否混杂模式。处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用
// 500这个参数主要用于processPacket()方法,指定超时的时间
final JpcapCaptor jpcap1 = JpcapCaptor.openDevice(devices[2],
caplen, promiscCheck, 1000);


/*----------------第二步抓包---------------*/
int i = 0;
while (i < 1000000) {
Packet packet = jpcap1.getPacket(); 
if (packet instanceof TCPPacket) {
TCPPacket tcpPacket = (TCPPacket) packet;
 
// 定义为80号端口,确定为HTTP数据包
if (tcpPacket.src_port == 1521
|| tcpPacket.dst_port == 1521) { 
i++;
System.out.println("本机地址:" + tcpPacket.src_ip);
System.out.println("目标地址:" + tcpPacket.dst_ip);  
List<Byte> tmps=new ArrayList<Byte>();
byte a;
for(int l=0; l<tcpPacket.data.length;l++){ 
a=tcpPacket.data[l];
if(a!=0 && a!=1 && a!=2 && a!=3 && a!=4 && a!=5 && a!=6 &&  a!=-1 && a!=-2 ){
tmps.add(a);  
}
}
byte[] tmpop=new byte[tmps.size()];
for(int l=0; l<tmps.size();l++){ 
tmpop[l]=tmps.get(l);
System.out.println(tmpop[l]);

System.out .println(new String(tmpop, "gb2312"));
 
 
}else if (tcpPacket.src_port == 8080
|| tcpPacket.dst_port == 8080) {
System.out.println("本机地址2:" + tcpPacket.src_ip);
System.out.println("目标地址2:" + tcpPacket.dst_ip);  
byte[] tmpStr=tcpPacket.data;
System.out .println(new String(tmpStr, "gb2312"));
}


}else if (packet instanceof UDPPacket) {
UDPPacket udpPacket = (UDPPacket) packet; 
//System.out .println(new String(udpPacket.data, "gb2312"));

}
}


} catch (Exception ef) { 
System.out.println("显示网络接口数据失败:  " + ef);
}
}
}

0 0
原创粉丝点击