创建一个tshark bash脚本来导出对象

创建一个tshark bash脚本来导出对象

问题描述:

好的,我刚刚开始学习网络安全,并且在此之前没有掌握linux知识。我试图编写一个脚本,当你遵循tcp流,然后导出对象时,它将基本上完成wireshark中的GUI。我几乎没有任何编码背景,我想知道最好的格式来做到这一点。一切工作完美,但后来我决定添加一个函数来测试与md5sum的原始输出。我无法让它工作。创建一个tshark bash脚本来导出对象

function testScript { 

    if [[ $test == "yes" ]]; then 
      echo "Type original file path: "; 
      read ogfpath; 
      md5sum "$fpath" "$ogfpath" > print 
    else 
    echo "Goodbye" 

fi 
} 

echo -n 'Type stream number and press ENTER: ' 
read stream 

echo -n 'Type pcap path and press ENTER: ' 
read pcap 

echo -n 'Type magic number and press ENTER: ' 
read mnum 

echo -n 'Type new file path and press ENTER: ' 
read fpath 

tshark -2 -q -z follow,tcp,raw,$stream -r $pcap | tr '\n' ' ' | sed 's\ \\g'  | grep -oP "(?<="$mnum").+" | sed "s/^/"$mnum"/g" | xxd -r -p > $fpath 

echo -n 'Do you want to test the program (y/n)? :' 
read test 

testScript 
+0

函数中的'$ test'是[局部变量](http://tldp.org/LDP/abs/html/localvar.html)。 [见这里](http://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function)将参数传递给函数。 – miken32

+0

还要注意你的引号在这里有问题:'grep -oP“(? miken32

我看到这里的问题是,你的$测试变量是本地的,唯一能够从内部的功能,换句话说,除非它在函数内部定义的,它不存在那里。

解决此问题的一个简单方法是将参数传递给函数,这在bash中非常简单。例如:

function test { 
    if [ "$1" == "yes" ]; then 
     echo "True!" 
    else 
     echo "False!" 
    fi 
} 

test "yes" 

在本例中,传递给函数“测试”的参数是,其通过将变量$ 1中的函数内部访问“是”。更多参数可以传递给函数和顺序访问,$ 2 $ 3,等等。在你的情况,你的函数将不得不这样调用:

testScript $test 

而且函数内部的if语句就必须像这个:

if [[ $1 == "yes" ]]; then 
+0

您还应该避免使用'test'内置命令。调用你的函数别的东西。 – tripleee

+0

非常感谢您的回答。我有一种感觉,这个函数不会识别这个变量,但我不知道该怎么去做。所以我不太确定它是否工作,因为现在当我运行程序时,它一路通过要求输入原始文件路径。我这样做,然后退出。我试图让它打印出屏幕上的MD5散列,然后退出。 –