feat: tcpdump 时过滤掉 vnc 数据包

1. 项目启动时从 ./lib/droidvnc-np-defaults.json 读取 vnc port
2. 不论是否输入package name 全部过滤掉 vnc 流量
3. 结束捕包时删除 pcap 文件
This commit is contained in:
shizhendong
2024-09-09 13:55:39 +08:00
parent b940421c69
commit 87e211987b
4 changed files with 41 additions and 19 deletions

View File

@@ -150,25 +150,32 @@ public class APIController {
throw new APIException(result.output());
}
if (returnFile) {
// response pcap file
File tempFile = T.FileUtil.file(Constant.TEMP_PATH, id + ".pcap");
try {
String filePath = result.output();
if (T.StrUtil.isEmpty(filePath)) {
throw new APIException(RCode.NOT_EXISTS);
String filePath = result.output();
try {
if (returnFile) {
// response pcap file
File tempFile = T.FileUtil.file(Constant.TEMP_PATH, id + ".pcap");
try {
if (T.StrUtil.isEmpty(filePath)) {
throw new APIException(RCode.NOT_EXISTS);
}
AdbUtil.CommandResult pulled = adbUtil.pull(filePath, tempFile.getAbsolutePath());
if (0 != pulled.exitCode()) {
throw new APIException(pulled.output());
}
T.ResponseUtil.downloadFile(response, tempFile.getName(), T.FileUtil.readBytes(tempFile));
} finally {
T.FileUtil.del(tempFile);
}
AdbUtil.CommandResult pulled = adbUtil.pull(filePath, tempFile.getAbsolutePath());
if (0 != pulled.exitCode()) {
throw new APIException(pulled.output());
}
T.ResponseUtil.downloadFile(response, tempFile.getName(), T.FileUtil.readBytes(tempFile));
} finally {
T.FileUtil.del(tempFile);
} else {
// response taskid
response.getWriter().write(T.JSONUtil.toJsonStr(R.ok().putData("id", id)));
}
} finally {
if (T.StrUtil.isNotEmpty(filePath)) {
// remove pcap file
adbUtil.execShellCommand(String.format("shell rm -rf %s", filePath));
}
} else {
// response taskid
response.getWriter().write(T.JSONUtil.toJsonStr(R.ok().putData("id", id)));
}
}

View File

@@ -21,6 +21,8 @@ public class EnvApiYml {
String serial;
String host;
Integer port;
Integer vncPort;
}
@Data

View File

@@ -29,6 +29,8 @@ public class AdbUtil {
private String host;
private Integer port;
private Integer vncPort;
private ExecutorService threadPool;
public String getSerial() {
@@ -42,6 +44,7 @@ public class AdbUtil {
this.serial = T.StrUtil.emptyToDefault(adb.getSerial(), "");
this.host = adb.getHost();
this.port = adb.getPort();
this.vncPort = adb.getVncPort();
// adb connect
this.connect();
// init
@@ -585,7 +588,7 @@ public class AdbUtil {
String pcapFilePath = "/data/local/tmp/capture_" + userId + "_" + packageName + "_" + taskId + ".pcap";
CommandExec.execForProcess(AdbCommandBuilder.builder()
.serial(this.getSerial())
.buildShellCommand(String.format("shell tcpdump -i nflog:%s -w %s &", userId, pcapFilePath))
.buildShellCommand(String.format("shell tcpdump not port %s -i nflog:%s -w %s &", this.vncPort, userId, pcapFilePath))
.build());
} else {
log.info("[startTcpdump] [capture all package]");
@@ -593,7 +596,7 @@ public class AdbUtil {
String pcapFilePath = "/data/local/tmp/capture_all_" + taskId + ".pcap";
CommandExec.execForProcess(AdbCommandBuilder.builder()
.serial(this.getSerial())
.buildShellCommand(String.format("shell tcpdump -w %s &", pcapFilePath))
.buildShellCommand(String.format("shell tcpdump not port %s -w %s &", this.vncPort, pcapFilePath))
.build());
}