2015-12-14 27 views
0

好的,我剛剛開始學習網絡安全,並且在此之前沒有掌握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「(?<=」$ mnum「)。+」'和here:sed''s/^ /「$ mnum」/ g「'。你會想逃離內在的。 – miken32

回答

1

我看到這裏的問題是,你的$測試變量是本地的,唯一能夠從內部的功能,換句話說,除非它在函數內部定義的,它不存在那裏。

解決此問題的一個簡單方法是將參數傳遞給函數,這在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散列,然後退出。 –

相關問題