Работа над фильтрацией через libpcap
This commit is contained in:
@@ -5,6 +5,7 @@ import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.pcap4j.core.BpfProgram;
|
||||
import org.pcap4j.core.PacketListener;
|
||||
import org.pcap4j.core.PcapHandle;
|
||||
import org.pcap4j.packet.IpV4Packet;
|
||||
@@ -36,6 +37,8 @@ public abstract class AbstractPcapWorker implements PcapWorker, PacketListener {
|
||||
protected PcapHandle pcap = null;
|
||||
protected final ExecutorService loopExecutorService;
|
||||
|
||||
protected String filter = null;
|
||||
|
||||
// во время работы должен быть != null
|
||||
protected ExecutorService processorExecutorService;
|
||||
|
||||
@@ -255,4 +258,17 @@ public abstract class AbstractPcapWorker implements PcapWorker, PacketListener {
|
||||
}).get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void setFilter(String filter) {
|
||||
this.filter = filter;
|
||||
applyFilter();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
protected void applyFilter() {
|
||||
if(filter != null && pcap != null && pcap.isOpen()) {
|
||||
pcap.setFilter(filter, BpfProgram.BpfCompileMode.OPTIMIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@ public class FilePcapWorker extends AbstractPcapWorker {
|
||||
public void start() {
|
||||
log.info("Using file " + file.getAbsolutePath());
|
||||
pcap = Pcaps.openOffline(file.getAbsolutePath());
|
||||
|
||||
applyFilter();
|
||||
|
||||
loopExecutorService.execute(this::runScan);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ public class LivePcapWorker extends AbstractPcapWorker {
|
||||
log.info("Using interface " + device.getName());
|
||||
pcap = device.openLive(65536, PcapNetworkInterface.PromiscuousMode.PROMISCUOUS, 100);
|
||||
|
||||
applyFilter();
|
||||
|
||||
try {
|
||||
log.info("Intercept started");
|
||||
pcap.loop(-1, this, loopExecutorService);
|
||||
|
||||
@@ -18,4 +18,6 @@ public interface PcapWorker {
|
||||
*/
|
||||
int closeTimeoutStreams(Protocol protocol, long timeoutMillis);
|
||||
|
||||
void setFilter(String filter);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user