1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java. tcp. 权限 java - tcpdump的不能够写PCAP文件。没有权限 - SO中文参考 - www.soinside.com...

java. tcp. 权限 java - tcpdump的不能够写PCAP文件。没有权限 - SO中文参考 - www.soinside.com...

时间:2022-10-22 05:32:47

相关推荐

java. tcp. 权限 java - tcpdump的不能够写PCAP文件。没有权限 - SO中文参考 - www.soinside.com...

我开发我的Java应用程序,所以我可以在我的机器接口的数据包嗅探和转储结果滚动PCAP文件的网络监控解决方案。当从Java代码启动(使用sudo)tcpdump命令,我得到tcpdump: /path/to/app/log/GTP00: Permission denied

细节

该命令使用Runtime.getRuntime().exec(command)其中command是一个字符串值sudo tcpdump -i eth0 -w /path/to/app/log/GTP -W 50 -C 20 -n net 10.246.212.0/24 and ip执行

启动Java应用程序的用户是“为testUser”属于组“testGroup”。这允许用户须藤tcpdump的。

目标目录具有以下属性:

[testUser@node ~]$ ls -ld /path/to/app/log

drwxrwxr-x. 2 testUser testGroup 4096 Feb 4 15:40 /path/to/app/log

更多细节

启动命令行SUCCESFULLY创建指定文件夹中的文件PCAP命令。

[testUser@node ~]$ ls -l /path/to/app/log/GTP00

-rw-r--r--. 1 tcpdump tcpdump 1276 Feb 4 16:12 /path/to/app/log/GTP00

我已经开发了用于测试目的的简化Java应用程序

package execcommand;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.logging.Level;

import java.util.logging.Logger;

public class ExecCommand {

public static void main(String[] args) {

try {

String command;

String line;

String iface = "eth0";

String capturePointName = "GTP";

String pcapFilterExpression = "net 10.246.212.0/24 and ip";

int capturePointMaxNumberOfFilesKept = 50;

int capturePointMaxSizeOfFilesInMBytes = 20;

command = "sudo tcpdump -i " + iface + " -w /path/to/app/log/"

+ capturePointName + " -W " + capturePointMaxNumberOfFilesKept + " -C "

+ capturePointMaxSizeOfFilesInMBytes + " -n " + pcapFilterExpression;

Process process = Runtime.getRuntime().exec(command);

BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));

while ((line = br.readLine()) != null) {

System.err.println(line);

}

} catch (IOException ex) {

Logger.getLogger(ExecCommand.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

这个测试计划,同一用户推出,成功创建指定的文件夹中PCAP文件。

[testUser@node ~]$ ls -l /path/to/app/log/GTP00

-rw-r--r--. 1 tcpdump tcpdump 1448 Feb 4 16:21 /path/to/app/log/GTP00

然后,我可以推断,这个问题以某种方式限制到我的Java应用程序。这是我的Java应用程序是如何启动:

exec java -Dknae_1 -.ssl.trustStorePassword= -.ssl.trustStore=/path/to/app/etc/certificates/truststore -.ssl.keyStorePassword= -.ssl.keyStore=/path/to/app/etc/certificates/keystore -d64 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8887,suspend=y -XX:-UseLargePages -Xss7m -Xmx64m -cp /path/to/app/lib/knae.jar:/path/to/app/lib/xphere_baseentity.jar:/path/to/app/lib/mysql.jar:/path/to/app/lib/log4j-1.2.17.jar:/path/to/app/lib/tools.jar:/path/to/app/conf:/path/to/app/lib/pcap4j-core-1.7.5.jar:/path/to/app/lib/pcap4j-packetfactory-static-1.7.5.jar:/path/to/app/lib/jna-5.1.0.jar:/path/to/app/lib/slf4j-api-1.7.25.jar:/path/to/app/lib/slf4j-simple-1.7.25.jar com.app.package.knae.Knae knae_1

UPDATE

我能写/tmp内PCAP文件。我也试着给777个权限/path/to/app/log无济于事。这些都显示目录的attibutes:

[testUser@node ~]$ ls -ld /tmp

drwxrwxrwt. 10 root root 4096 Feb 6 10:13 /tmp

[testUser@node ~]$ ls -ld /path/to/app/log

drwxrwxrwx. 2 testUser testGroup 4096 Feb 6 09:25 /path/to/app/log

根据需要,我会提供任何其他信息。

为什么tcpdump的抱怨不能够写这个文件?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。