Bash TorSocks 问题

Bash TorSocks Issue

理论上,我使用此脚本的目标是随机生成 .onion urls 并检查它们是否存在。基本上,status 变量发送 HEAD 请求然后返回响应。 head 从响应中获取第一行,然后 grep 在第一行中搜索 HTTP header,将输出发送到 /dev/null。如果一切顺利,status 应该设置为 true。我使用 if 语句来检查 status 是否为真。如果为真,则输出 "this service exists",如果 status 不为真,则输出 "this service does not exist"。

问题是,如果洋葱 url 不存在,则 torsocks returns 会出错。

错误是:

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

我证实该命令确实适用于合法的现有洋葱 urls,这意味着该错误显然与 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

非常感谢所有帮助。

您根本不会分配 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