php - 来自 BASH 的 Tcpdump

标签 php linux bash shell tcpdump

这可能有点复杂,我会尽力解释。

所以我有一台运行 Bro/Snort IDS 的服务器(不面向互联网)。在我的 Bro 服务器上,我有大量通过点击获得的 pcap 流量。 我想做的是创建一个在 Bro 服务器上运行的 Web 应用程序,它允许我发送包含 tcpdump 过滤器信息(例如源 ip、源端口、目标 ip 等)的 GET,然后触发 Bash 脚本运行 tcpdump 来遍历我的所有 pcap 日志并创建过滤数据包的新 pcap。然后这些数据包将与 mergecap 合并。

我有 Bash 脚本,并且可以从 cli 运行它,没有问题。

这是 Bash 脚本:

#!/bin/bash

FILTER=$1
STARTTIME=$2
RANDER=$3

FILENUM=0

for FILES in `ls /dailylogs/$STARTTIME/snort*`
do
  ((FILENUM++))
  tcpdump -r $FILES "\'"$FILTER"\'" -w /pcap/tmp-$FILENUM
done

mergecap -w /pcap/mergedcap-$RANDER.pcap /pcap/tmp-*
rm -f /pcap/tmp-*

我调用脚本的 php 在这里:

$script = "mergecaps.sh";

$filter = "((src $sip) and (dst $dip))";


$randnum = rand();
$cmd = $script . " " . $filter . " " . $st . " " . $randnum;
exec("bash /.scripts/".$cmd, $raw);

我知道脚本实际上正在执行并且过滤器数据是正确的,因为我在 bash 脚本中放置了以下内容:

touch /pcap/random.txt
echo $FILTER >> /pcap/random.txt
echo $STARTTIME >> /pcap/random.txt
echo $RANDER >> /pcap/random.txt

这样,脚本创建 random.txt 并附加变量就没有问题了。所有数据都是正确的。只是不会运行 tcpdump。我已将 tcpdump 的 apparmor 状态从强制更改为提示。我还尝试在 bash 脚本中的 tcpdump 前面添加 sudo。

有人知道我还能做什么吗?

非常感谢任何建议! :)

最佳答案

找到答案了,是权限问题。很简单,我只是添加了

www-data ALL= NOPASSWORD: /bin/bash *, /usr/sbin/tcpdump *, /usr/bin/mergecap *

到/etc/sudoers 并且工作正常。忘记了我之前在测试脚本的用户身上做过这样的事情。 (对于 Linux 还是有点陌生​​)。

关于php - 来自 BASH 的 Tcpdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815172/

相关文章:

php - 如何在不刷新导航栏的情况下加载内容

php - 从 php 到 mysql 的特殊字符

c++ - fatal error : opencv2/core. hpp:在 opencv4 中没有这样的文件或目录编译终止

linux - 如何制作没有数据 block 的 ext2/3 文件系统

python - xonsh 中遍历文件行的最佳方法是什么?

php - AJAX 无法 POST 到 PHP 文件

php - 将数组内容插入字符串

杀死 parent 后关闭文件子描述符?

bash - 如何解决Android Studio问题?

linux - 动态评估字符串中的变量值