📄 packethandler.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 + -