2016-11-25 75 views
0

我寫了bash腳本來計算文件的哈希值,當它給出文件路徑並查詢文件哈希中的一個以從API服務獲取該哈希的結果時(使用jq解析)。速率限制bash腳本提供的cURL請求的數量

#Scanner.sh 

#!/bin/bash 

for i in $(find $1 -type f);do 
    md5_checksum=$(md5sum $i|cut -d' ' -f 1) 
    sha1_checksum=$(sha1sum $i|cut -d' ' -f 1) 
    sha256_checksum=$(sha256sum $i|cut -d' ' -f 1) 
    json_result="$(curl --silent -H 'Authorization:Basic XXXX' 'https://XXXXX.com/api/databrowser/malware_presence/query/sha1/'$sha1_checksum'?format=json&extended=true'| jq -r '.rl.malware_presence.name,.rl.malware_presence.level' | awk -vORS=, '{print $1}' |sed 's/,$/\n/')" 
    echo "$md5_checksum,$sha1_checksum,$sha256_checksum,$json_result" 
done 


#Result : 
c63a1576e4b416e6944a1c39dbdfc3b4,fd55dfdd9a432e34ce6c593cd09a48f457f7aab6,e2d1c1975c2406f60f1c0fe5255560c2cd06434e669933536a86296a2eb70020,Malware,5 

現在,處理一個並獲得一個文件散列(10秒)的結果需要太多的時間。我如何每秒發送5個請求並更快地獲得結果?

任何建議嗎?

回答

1

你可以把你的代碼的功能,並在後臺運行,像這樣的東西:

runCurl() { 
     md5_checksum=$(md5sum $1|cut -d' ' -f 1) 
     sha1_checksum=$(sha1sum $1|cut -d' ' -f 1) 
     sha256_checksum=$(sha256sum $1|cut -d' ' -f 1) 
     json_result="$(curl --silent -H 'Authorization:Basic XXXX' 'https://XXXXX.com/api/databrowser/malware_presence/query/sha1/'$sha1_checksum'?format=json&extended=true'| jq -r '.rl.malware_presence.name,.rl.malware_presence.level' | awk -vORS=, '{print $1}' |sed 's/,$/\n/')" 
     echo "$md5_checksum,$sha1_checksum,$sha256_checksum,$json_result" 
    } 

    for i in $(find $1 -type f);do 
     runCurl $i & 
    done 
+0

謝謝,這工作。但使用「&」可能會啓動多個請求。這可能會轟炸API服務服務器。我如何評價限制?例如,每分鐘有50個查詢? – Arun

+0

您可以使用'wait'命令等待當前後臺任務完成。所以也許你可以每5次請求使用這個命令。 –