2017-10-03 4 views
4

httpサービスからnonceを取得する必要があります curlを使用し、後でopensslを使用してそのnonceのsha1を計算します。 しかし、そのために、私は(行われる)変数与えられた位置から特殊文字にパターン位置のファイルから部分文字列を抽出する

1ステップ

curl --user username:password -v -i -X POST http://192.168.0.202:8080/RPC3 -o output.txt -d @initial.txt 

にナンスを取得する必要があり、現在は、出力ファイルの@ output.txtとは、HTTP REPONSE

HTTP/1.1 401 Unauthorized 
Server: WinREST HTTP Server/1.0 
Connection: Keep-Alive 
Content-Length: 89 
WWW-Authenticate: ServiceAuth realm="WinREST", nonce="/wcUEQOqUEoS64zKDHEUgg==" 

<html><head><title>Unauthorized</title></head><body>Error 401: Unauthorized</body></html> 

を保持しています私は "nonce ="の位置を取得し、すべての方法を "char"に抽出する必要があります

よろしくお願いします。

-o/ --only-matching-P/ --perl-regexpオプション(GNU grepで利用可能)を使用して grepと非常にシンプル

答えて

2

:私たちがいなかった場合、通常はnonce="が含まれるであろう-oオプションは、マッチした部分を印刷します

$ grep -oP 'nonce="\K[^"]+' output.txt 
/wcUEQOqUEoS64zKDHEUgg== 

を、 PCREのreset match startエスケープシーケンスを使用しました。 (グレンが示唆するように)

また、あなたのoutput.txt(つまり、サーバの応答)が1ナンスよりをもっと含めることができ、あなたが最初のものだけを読んで興味を持っている場合、あなたは-m1オプションを使用することができます。

$ grep -oPm1 'nonce="\K[^"]+' output.txt 

変数にナンスを格納するには、単にコマンド置換を使用します。またはちょうどそれはあなたが必要ダイジェスト取得するopenssl sha1を通してそれを渡す:

$ nonce=$(grep -oPm1 'nonce="\K[^"]+' output.txt) 
$ echo "$nonce" 
/wcUEQOqUEoS64zKDHEUgg== 

$ read hash _ <<<"$(grep -oPm1 'nonce="\K[^"]+' output.txt | openssl sha1 -r)" 
$ echo "$hash" 
2277ef32822c37b5c2b1018954f750163148edea 
+0

最初のマッチの後に終了するために '-m1'オプションを追加することもできます。 –

+0

良い点、ありがとう。私は答えを更新しました。 – randomir

0

あなたはGNUを使用することができ、以下のように、このためのsed:

ubuntu$ cat output.txt 
HTTP/1.1 401 Unauthorized 
Server: WinREST HTTP Server/1.0 
Connection: Keep-Alive 
Content-Length: 89 
WWW-Authenticate: ServiceAuth realm="WinREST", nonce="/wcUEQOqUEoS64zKDHEUgg==" 

<html><head><title>Unauthorized</title></head><body>Error 401: Unauthorized</body></html> 

ubuntu$ sed -E -n 's/(.*)(nonce="\/)([a-zA-Z0-9=]+)(")(.*)/\3/gp' output.txt 
wcUEQOqUEoS64zKDHEUgg== 

よろしく!

+1

注記:i)ノンス値から先行するスラッシュを紛失しているように見えます - あなたのキャラクタセットはあまりにも制限的です。 ii)あなたは交換に必要なものだけをすべて取り込む必要はありません: 's /.* nonce ="([^ "] +)"。*/\ 1/p' –

+0

@glennjackman私は抜き出したいグループだけをキャプチャすることを真剣に考えなかったし、はい、私はスラッシュを間違って配置した。 –

関連する問題