0

理论上,我使用此脚本的目标是随机生成 .onion 网址并检查它们是否存在。基本上,状态变量是发送一个 HEAD 请求然后返回响应。 head从响应中抓取第一行,然后 grep 在第一行中搜索 HTTP 标头,将输出发送到 /dev/null。如果一切顺利,status应该设置为 true。我使用 if 语句来检查状态是否为真。如果为真,则输出“此服务存在”,如果状态不为真,则输出“此服务不存在”。

问题是,如果洋葱 url 不存在,torsocks 会返回错误。

错误是:

[Jul 03 17:09:23] ERROR torsocks[4422]: General SOCKS server failure (in socks5_recv_connect_reply() at socks5.c:516)

我验证了该命令确实适用于合法的现有洋葱 URL,这意味着该错误显然与 torsocks 有关。

有人知道解决方案或可能的解决方法吗?我找不到任何有用的东西。

这是我的代码:

#!/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

非常感谢所有帮助。

4

1 回答 1

3

您根本不会分配status任何非空值。

value=$(something >/dev/null)

...丢弃something(这就是>/dev/null所做的)的输出,因此将始终无条件地分配一个空字符串value(因为$(...)-- 命令替换 -- 捕获output,而不是exit status)。

此外,您不会丢弃错误消息,因为它们在 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
于 2015-07-03T22:37:17.340 回答