Bash TorSocks Issue
Теоретически, моя цель с этим сценарием состоит в том, чтобы случайным образом генерировать URL-адреса.onion и проверять, существуют они или нет. По сути, переменная состояния отправляет запрос HEAD, а затем возвращает ответ. head берет первую строку из ответа, затем grep ищет HTTP-заголовок в этой первой строке, отправляя вывод в /dev/null. Если все идет хорошо, статус должен быть установлен в true. Я использую оператор if, чтобы проверить, является ли статус истинным. Если это правда, то я вывожу "эта служба существует", в то время как если состояние не истинно, выводится "эта служба не существует".
Проблема в том, что торс возвращает ошибку, если URL лука не существует.
Ошибка:
[Jul 03 17:09:23] ERROR torsocks[4422]: General SOCKS server failure (in socks5_recv_connect_reply() at socks5.c:516)
Я проверил, что команда действительно работает на допустимых существующих URL-адресах лука, а это означает, что ошибка совершенно очевидно связана с торсом.
Кто-нибудь знает решение или возможное решение? Я не мог найти ничего полезного.
Вот мой код:
#!/bin/bash
url="http://"$(cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-z0-9' | fold -w 16 | head -n 1)".onion";
echo "[i] Scanning $url";
status=$(torsocks curl -s --head $url | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null);
if $status; then
echo "[+] Valid hidden service $url";
else
echo "[-] Invalid hidden service $url";
fi
Вся помощь очень ценится.
1 ответ
Вы никогда не назначаете status
любое непустое значение вообще.
value=$(something >/dev/null)
...выбрасывает выводsomething
(вот что >/dev/null
и всегда будет назначать пустую строку value
(поскольку $(...)
- подстановка команды - фиксирует вывод, а не статус выхода).
Более того, вы не выбрасываете сообщения об ошибках, потому что они находятся на stderr (FD 2), а не на stdout (FD 1).
Делая некоторые предположения в намерении, возможно, вы хотите вместо этого:
if torsocks curl --fail --head "$url" >/dev/null 2>&1; then
echo "[+] Valid hidden service $url";
else
echo "[-] Invalid hidden service $url";
fi