Я написал фрагмент кода для обработки пинга с использованием JPCAP. код, который я написал, приведен ниже:
while (true) {
try {
PacketCapture m_pcap;
m_pcap = new PacketCapture();
m_pcap.open("\\Device\\NPF_{007262BD-....-7EE83D72EBEA}",true);//param 1 is actual device ID
m_pcap.setFilter("proto ICMP", true);
pktlistener a = new pktlistener(); //handles the packet
m_pcap.addPacketListener(a);
System.out.println("going to sleep");
Thread.sleep(1 * 1000);// Waiting for 1 second before ending capture
System.out.println("woken up");
m_pcap.removePacketListener(a);
m_pcap.endCapture();
m_pcap.close();
a = null;
m_pcap = null;
} catch (Exception e) {
e.printStackTrace();
}
}
Теперь приведенный выше код запускает новый захват через каждую секунду. Проблема с вышеизложенным заключается в том, что после 10 запусков цикла возникает исключение:
Exception in thread "Thread-6" java.lang.Error: Too many instances, exceeds 10
at net.sourceforge.jpcap.capture.PacketCapture.<init>(PacketCapture.java:51)
Q1. Как мне предотвратить это. Мне нужно запускать новый PacketCapture каждую секунду.
Q2. Есть ли другой более простой способ захвата сообщений ping, полученных в системе через java?