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

📄 packethandler.java

📁 基于Jpcap开发的流量监控软件
💻 JAVA
字号:
package joel.ethernettools;
/**
 * THIS CLASS IS NOT WORKING AS THE NAME.[I MADE THE WRONG CLASS NAME.]
 * MAIN FUNCTION:
 * CAPTURE PACKETS SENDED/RECEIVED ON THE SPECIFIED NIC.
 * AND STORE TO PacketPool FOR FURTURE ANALYSIS OR SAVING.
 */
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.Properties;

import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.packet.Packet;

public class PacketHandler {
	protected static final int PACKET_TYPE_ARP = 1;
	protected static final int PACKET_TYPE_RARP = 2;
	protected static final int PACKET_TYPE_ICMP = 3;
	protected static final int PACKET_TYPE_IP = 4;
	protected static final int PACKET_TYPE_IPV6 = 5;
	protected static final int PACKET_TYPE_TCP = 6;
	protected static final int PACKET_TYPE_UDP = 7;
	private NIC nic;
	private JpcapSender sender;
	private PacketCreator packetCreator;
	private Packet packet;
	private PacketMonitor packetMonitor;
	private MsgProvider msgProvider;
	private ProcessedPacket prsdPacket;
	private PacketPool pool;
	private int PacketTotalReceived=0,TotalDataReceived=0;
	
	public PacketHandler(MsgReceiver logger) {
		msgProvider = new MsgProvider();
		this.msgProvider.addMsgReceiver(logger);
		packetCreator = new PacketCreator(logger);
//		pool = new PacketPool();
		// analyzer = new PacketAnalyzer();
		// analyzer.setPacketPool(pool);
		msgProvider.addNewMsg("PACKETHANDLER INIT DONE.");
	}
	protected void setPacketPool(PacketPool pool){
		this.pool=pool;
	}
	protected void setSelectedNIC(final NIC nic) {
		this.nic = nic;
		initSender();
		packetCreator.setSelectedNIC(nic);
		packetMonitor = new PacketMonitor();
	}

	/**
	 * send single packet with specified para.
	 * 
	 * @param PacketType
	 */
	protected void sendPacket(final int PacketType) {
		try {
			packet = packetCreator.CreateICMPPacket(InetAddress
					.getByName("192.168.100.100"), "000c29926253");
			sender.sendPacket(packet);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}

	private void initSender() {
		try {
			sender = JpcapSender.openDevice(nic.getInterface());
		} catch (IOException e) {
			e.printStackTrace();
		}
		msgProvider.addNewMsg("PACKET SENDER IS READY.");
	}

	protected void startListening() {
		packetMonitor.start();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	}
	
	private class PacketMonitor extends Thread implements jpcap.PacketReceiver {
		jpcap.JpcapCaptor captor;
		// PacketAnalyzer analyzer;
		Properties pakcetProperties;
		private PacketMonitor() {
			msgProvider.addNewMsg("MONITOR INIT DONE.");
		}

		public void run() {
			msgProvider.addNewMsg("MONITOR IS ONLINE.");
			try {
				captor = JpcapCaptor.openDevice(nic.getInterface(), 65536,
						true, 1000);
				captor.loopPacket(-1, this);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		@Override
		public void receivePacket(Packet p) {
			captor.updateStat();
			PacketTotalReceived=captor.received_packets;
			TotalDataReceived+=p.len;
			pool.addNewPacket(p);
			pool.addNewOriginalPacket(new OriginalPacket("", p.len, new GregorianCalendar().getTime()
					.toString(), OriginalPacket
					.convertByteArrayToString(p.header), OriginalPacket
					.convertByteArrayToString(p.data)));
			msgProvider.addNewMsg("Received packet: " + p.toString());
		}
	}

	protected int getPacketTotalReceived() {
		return PacketTotalReceived;
	}
	protected int getTotalDataReceived() {
		return TotalDataReceived;
	}
}

⌨️ 快捷键说明

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