⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetlogger.java

📁 基于Jpcap开发的流量监控软件
💻 JAVA
字号:
package joel.ethernettools;
/**
 * THIS CLASS IS USED TO FETCH OriginalPacket/ProcessedPacket FROM PacketPool,
 * AND SAVE TO DATABASE.
 * @author panzer
 *
 */
public class PacketLogger implements Runnable {
	private PacketPool pool;
	private MySQLOperator operator;
	private boolean enableOriginalPacketLog, enableProcessedPacketLog;
	private OriginalPacket[] original;
	private ProcessedPacket[] processed;
	private int Capcity = 10;
	private MsgProvider provider;
	private int totalReceivedOriPacket = 0, totalReceivedProPacket = 0,
			totalSavedOriPacket = 0, totalSavedPropacket = 0;
	private int currentOriCapcity = 0, currentProCapcity = 0;
	private boolean saveFlag=false;
	
	protected int getTotalReceivedOriPacket() {
		return totalReceivedOriPacket;
	}

	protected int getTotalReceivedProPacket() {
		return totalReceivedProPacket;
	}

	protected int getCurrentOriCapcity() {
		return currentOriCapcity;
	}

	protected int getCurrentProCapcity() {
		return currentProCapcity;
	}

	protected void setEnableOriginalPacketLog(boolean enableOriginalPacketLog) {
		this.enableOriginalPacketLog = enableOriginalPacketLog;
	}

	protected void setEnableProcessedPacketLog(boolean enableProcessedPacketLog) {
		this.enableProcessedPacketLog = enableProcessedPacketLog;
	}

	protected void setMsgReceiver(MsgReceiver m) {
		provider.addMsgReceiver(m);
	}


	public PacketLogger() {
		provider = new MsgProvider();
		operator = new MySQLOperator();
		original = new OriginalPacket[Capcity];
		processed = new ProcessedPacket[Capcity];
	}
//	protected void setMySQLOperator(MySQLOperator o){
//		this.operator=o;
//	}
	public PacketLogger(boolean enableOriginalPacketLog,
			boolean enableProcessedPacketLog) {
		this();
		this.enableOriginalPacketLog = enableOriginalPacketLog;
		this.enableProcessedPacketLog = enableProcessedPacketLog;
	}

	protected void setPacketPool(PacketPool pool) {
		this.pool = pool;
	}

	protected void logOriginalPacket(OriginalPacket[] p) {
		if (enableOriginalPacketLog == false)
			return;
		saveFlag=operator.add(p);
//		if(saveFlag==true){
		provider.addNewMsg("saved OriginalPacket.");
		totalSavedOriPacket += p.length;
		p=null;
//		}
	}

	protected void logProcessedPacket(ProcessedPacket[] p) {
		if (enableProcessedPacketLog == false)
			return;
		saveFlag=operator.add(p);
//		if(saveFlag==true){
		provider.addNewMsg("saved ProcessedPacket.");
		totalSavedPropacket += p.length;
		p=null;
//		}
	}

	protected void setSaveEveryManyPackets(int i){
		this.Capcity=i;
		original = new OriginalPacket[Capcity];
		processed = new ProcessedPacket[Capcity];
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}

	@Override
	public void run() {
		boolean flag=false;
		provider.addNewMsg("log thread: " + Thread.currentThread().getName()
				+ " start.");
		while (true) {
			if ((original[currentOriCapcity] = pool.getNewOriginalPacket()) != null) {
				totalReceivedOriPacket++;
				if (currentOriCapcity == Capcity - 1) {
					this.logOriginalPacket(original);
					currentOriCapcity = 0;
				} else {
					currentOriCapcity++;					
				}
			} else if ((processed[currentProCapcity] = pool
					.getNewProcessedPacket()) != null) {
				totalReceivedProPacket++;
				if (currentProCapcity == Capcity - 1) {
					this.logProcessedPacket(processed);
					currentProCapcity = 0;
				} else {
					currentProCapcity++;					
				}
			} else
				try {
					Thread.currentThread().sleep(
							Math.round(Math.random() * 1000 * 5));
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
	}

	protected int getTotalSavedOriPacket() {
		return totalSavedOriPacket;
	}

	protected int getTotalSavedPropacket() {
		return totalSavedPropacket;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -