网络抓包工具的首选是Sniffer。但分析数据时有局限性。比如我要同时监听所有的网卡。筛选发送到某个地址的数据生成绘图等等。
参考了 http://javafound.iteye.com/blog/165723 ,javafound 大神基于jpcap的网络实时监控程序。我想做数据分析,就在程序上改了一下去除了图形生成,改成了数据入库以便对数据进行分析。
主类:Tcpdump.java
package com.fitweber.socket;
import java.util.Map;
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
/**
* 1.使用jpcap抓取网络流量的主类,
* 2.这个类要根据网卡个数,启动线程分别抓取各个网卡上的流量入表中
* 3.生成图表的对象从流量表中取出数据
* 4.这个类设计为单实例,在第一次调用时启动抓数据线程;
* 5.目前没有设计停止抓取机制....
* @author www.NetJava.cn modify by wheatmark
*/
public class Tcpdump {
private Tcpdump(){}
/**存入某个地址名字和流量统计值*/
private Map nameTrafficMap=new java.util.HashMap();
//单实例
private static Tcpdump tcpdump=null;
public static void main(String args[]){
//启动统计线程
Tcpdump.ins();
}
/**
* 单实例调用:其它对象调用这个类的方法时,必须通过这个方法
* 这样,保证了流量统计线程的启动,且只启动了一次
* */
public synchronized static Tcpdump ins(){
if(null==tcpdump){
tcpdump=new Tcpdump();
tcpdump.init();
}
return tcpdump;
}
/**生成报表的Servlet调用用于生成图表中数据*/
public Map getNameTrafficMap(){
return nameTrafficMap;
}
/**
* 根据网卡个数,启动统计线程
* 注意:本地地址,即127.0.0.1上的不统计
*/
private void init() {
try{
//获取本机上的网络接口对象
finalNetworkInterface[] devices = JpcapCaptor.getDeviceList();
/*
* /172.16.175.242
*/
for(int i=0;i
Network