2014-02-19 21 views
0

通是正確的捲曲我寫了下面的腳本:如何保證用戶使用bash

#!/bin/bash 
if [ $# -ne 1 ];then 
    echo "Usage: ./script <input-file>" 
    exit 1 
fi 

while read user pass; do 
curl -iL --data-urlencode user="$user" --data-urlencode password="$pass" http://foo.com/signin 1>/dev/null 2>&1 
    if [ $? -eq 0 ];then 
     echo "ok" 
    elif [ $? -ne 0 ]; then 
     echo "failed" 
    fi 
done < $1 

問題:

每當我甚至錯誤的用戶&運行結果傳遞是ok對我來說......

我怎樣才能確定我的參數是否正確?

謝謝

回答

1

這是因爲你正在從你的curl命令獲得輸出。打字與隨機的用戶命令/通得到這個:

$ curl -iL --data-urlencode user=BLAHBLAH --data-urlencode password=BLAH http://foo.com/signin 
HTTP/1.1 301 Moved Permanently 
Server: nginx/1.0.5 
Date: Wed, 19 Feb 2014 05:53:36 GMT 
Content-Type: text/html 
Content-Length: 184 
Connection: keep-alive 
Location: http://www.foo.com/signin 
. . . 
. . . 
<body> 
    <!-- This file lives in public/500.html --> 
    <div class="dialog"> 
    <h1>We're sorry, but something went wrong.</h1> 
    </div> 
</body> 
</html> 

因此,

$ echo $? 
0 

但修改URL垃圾:

$ curl -iL --data-urlencode user=BLAHBLAH --data-urlencode password=BLAH http://foof.com/signin 
curl: (6) Could not resolve host: foof.com 
$ echo $? 
6 
+0

好吧,但是如何用bash寫入我自己?因爲行使暴力......謝謝 – MLSC

+0

@MortezaLSC這將是困難的只使用'$?'。您可能必須評估'curl'命令返回的文本。 –

+0

我做了一個錯誤的用戶通過,結果又是'0' – MLSC

1

即使登錄失敗,HTTP服務器仍然會返回一個包含錯誤信息的頁面。由於curl能夠檢索此頁面,它將成功完成。

爲了使curl在服務器錯誤上失敗,您需要參數--fail。雖然根據curl手冊頁這可能不是安全的,但值得一試。

如果--fail不起作用,您可以在curl請求的輸出中解析頭文件或查看--write-out參數。

+0

如何確定哪一個是真的?謝謝 – MLSC

+1

唯一可以肯定的方法就是使用HTTP服務器進行嘗試。對失敗(也是成功)的登錄嘗試的反應可能會有很大差異。 – Adaephon