PcapWorker переписан на pcap_loop

This commit is contained in:
serega6531
2019-05-15 00:36:20 +03:00
parent 6bbfa49b7a
commit add19bc27a

View File

@@ -1,11 +1,9 @@
package ru.serega6531.packmate; package ru.serega6531.packmate;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.pcap4j.core.PcapHandle; import org.pcap4j.core.*;
import org.pcap4j.core.PcapNativeException;
import org.pcap4j.core.PcapNetworkInterface;
import org.pcap4j.core.Pcaps;
import org.pcap4j.packet.IpV4Packet; import org.pcap4j.packet.IpV4Packet;
import org.pcap4j.packet.Packet; import org.pcap4j.packet.Packet;
import org.pcap4j.packet.TcpPacket; import org.pcap4j.packet.TcpPacket;
@@ -24,11 +22,10 @@ import java.net.Inet4Address;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
@Component @Component
@Slf4j @Slf4j
public class PcapWorker { public class PcapWorker implements PacketListener {
private final ServicesService servicesService; private final ServicesService servicesService;
private final StreamService streamService; private final StreamService streamService;
@@ -70,17 +67,9 @@ public class PcapWorker {
executorService.execute(() -> { executorService.execute(() -> {
try { try {
log.info("Intercept started"); log.info("Intercept started");
while (true) { pcap.loop(-1, this); // использовать другой executor?
if (pcap.isOpen()) { } catch (InterruptedException ignored) {
try { // выходим
final Packet packet = pcap.getNextPacketEx();
processPacket(packet);
} catch (TimeoutException ignored) {
}
} else {
break;
}
}
} catch (Exception e) { } catch (Exception e) {
log.error("Error while capturing packet", e); log.error("Error while capturing packet", e);
stop(); stop();
@@ -89,15 +78,17 @@ public class PcapWorker {
} }
@PreDestroy @PreDestroy
@SneakyThrows
public void stop() { public void stop() {
if (pcap != null && pcap.isOpen()) { if (pcap != null && pcap.isOpen()) {
pcap.breakLoop();
pcap.close(); pcap.close();
} }
log.info("Intercept stopped"); log.info("Intercept stopped");
} }
private void processPacket(Packet rawPacket) { public void gotPacket(Packet rawPacket) {
Inet4Address sourceIp = null; Inet4Address sourceIp = null;
Inet4Address destIp = null; Inet4Address destIp = null;
String sourceIpString = null; String sourceIpString = null;