2016-08-28 17 views
2

現在のスクリプト(scan.sh)は、以下のリストに記載されている暗号のいずれかとネゴシエートに時間がかかりすぎて、その時点で処理が滞っています。Bash終了問題

$ openssl ciphers -V | grep "CBC3" 

      0xC0,0x12 - ECDHE-RSA-DES-CBC3-SHA SSLv3 Kx=ECDH  Au=RSA Enc=3DES(168) Mac=SHA1 
      0xC0,0x08 - ECDHE-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH  Au=ECDSA Enc=3DES(168) Mac=SHA1 
      0x00,0x16 - EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH  Au=RSA Enc=3DES(168) Mac=SHA1 
      0x00,0x13 - EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH  Au=DSS Enc=3DES(168) Mac=SHA1 
      0xC0,0x0D - ECDH-RSA-DES-CBC3-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=3DES(168) Mac=SHA1 
      0xC0,0x03 - ECDH-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=3DES(168) Mac=SHA1 
      0x00,0x0A - DES-CBC3-SHA   SSLv3 Kx=RSA  Au=RSA Enc=3DES(168) Mac=SHA1 

次のコマンドを実行します。

$/scan.sh X.X.X.X

にはどうすればいいと遅延暗号のいずれかのための出口は、交渉のための次の暗号に移動するのですか?どんな提案もお願いします、私はBashに慣れていません。

#scan.sh 

#!/usr/bin/env bash 

# OpenSSL requires the port number. 
SERVER=$1:443 
DELAY=1 
ciphers=$(openssl ciphers -V | grep "CBC3" | awk '{print $3}') 

for cipher in ${ciphers[@]} 
do 
echo -n Testing $cipher... 
result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1) 
if [[ "$result" =~ ":error:" ]] ; then 
    error=$(echo -n $result | cut -d':' -f6) 
    echo NO \($error\) 
else 
    if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher :" ]] ; then 
    echo YES 
    else 
    echo UNKNOWN RESPONSE 
    echo $result 
    fi 
fi 
sleep $DELAY 
done 
+1

['timeout'](https://www.gnu.org/software/coreutils/manual/coreutils.html#timeout-invocation)コマンドをお探しですか?これは、Bash自体ではなく、GNU CoreUtilsにあります。 –

答えて

4

まず、ciphersを次のような配列にすると、きれいに見えますか?

ciphers=($(openssl ciphers -V | awk '/CBC3/{print $3}')) 

その後、コマンドの

result="$(timeout 10s openssl s_client -cipher "${cipher[@]" -connect "$SERVER" 2>&1)" 

ノート

  • timeout 10s待ちの10Sは、他の完了するような何かがそれ
  • ダブル"$SERVER"のような変数を引用し、スクリプトを作る殺すん変数は小文字であり、システムと競合しませんem変数。
+0

@JohnKugelman: '2>&1'については良い点がありますが、ここでは不要と思われる' echo -n'に関しては、なぜここにopを含めるべきですか? – sjsam

+0

@sjsamありがとうございます。タイムアウト関数は本当にここで役立ちます。 "echo -n"に関して、私はそれを不必要に言及しました!私のオリジナルランでそれを削除しました。 – Arun

+1

これは '' grep'の無用な使い方です(http://www.iki.fi/era/unix/award.html#grep) - 'grep x | grep'のようなものです。 awk '{foo}'を便利に 'awk '/ x/{foo}'にリファクタリングすることができます ' – tripleee

関連する問題