PcapWorker переписан на pcap_loop
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user