创建一个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
我看到这里的问题是,你的$测试变量是本地的,唯一能够从内部的功能,换句话说,除非它在函数内部定义的,它不存在那里。
解决此问题的一个简单方法是将参数传递给函数,这在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
您还应该避免使用'test'内置命令。调用你的函数别的东西。 – tripleee
非常感谢您的回答。我有一种感觉,这个函数不会识别这个变量,但我不知道该怎么去做。所以我不太确定它是否工作,因为现在当我运行程序时,它一路通过要求输入原始文件路径。我这样做,然后退出。我试图让它打印出屏幕上的MD5散列,然后退出。 –
函数中的'$ test'是[局部变量](http://tldp.org/LDP/abs/html/localvar.html)。 [见这里](http://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function)将参数传递给函数。 – miken32
还要注意你的引号在这里有问题:'grep -oP“(? miken32