3

我想自动生成一个可以到达某个 IP 地址的 Tor 出口节点列表。我在网上搜索了一段时间,从http://sjoerd-hemminga.com/blog/2012/10/block-tor-exit-nodes-using-iptables/发现了这段代码

if [[ -z "$1" ]]; then
  echo Usage: $0 "<your host's ip>"
  exit 1
fi

hostip=$1

for i in $(wget https://check.torproject.org/cgi-bin/TorBulkExitList.py\?ip=$hostip -O- -q |\
    grep -E '^[[:digit:]]+(\.[[:digit:]]+){3}$'); do
  sudo iptables -A INPUT -s "$i" -j DROP
done

有人可以帮助我更好地理解这段代码,因为每次我尝试运行它时,它都会产生错误。

欢迎任何替代答案,但我希望它们在 Python 中。

4

3 回答 3

3
import os
import re
import sys
import urllib

if len(sys.argv) != 2:
    print "Usage {} <your host's ip>".format(sys.argv[0])
    sys.exit(1)

hostip = sys.argv[1]

u = urllib.urlopen('https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=' + hostip)
for ip in u:
    ip = ip.strip()
    if re.match('\d+(\.\d+){3}$', ip):
        #print ip
        os.system('sudo iptables -A INPUT -s "{}" -j DROP'.format(ip))
u.close()
于 2013-06-07T07:20:31.203 回答
0

如果您已将 Tor 配置为具有控制端口和服务器描述符...

ControlPort 9051
CookieAuthentication 1
UseMicrodescriptors 0

...然后您可以使用stem轻松枚举出口...

from stem.control import Controller

with Controller.from_port(port = 9051) as controller:
  controller.authenticate()

  for desc in controller.get_server_descriptors():
    if desc.exit_policy.is_exiting_allowed():
      print desc.address

也就是说,如果您真正的问题是“我如何使用每个 Tor 出口做某事”,那么请不要!反复制作电路对 Tor 网络有害,有关此内容的更多信息,请参阅stem 的常见问题解答

于 2013-06-16T02:53:52.763 回答
0

这里( https://github.com/RD17/DeTor ) 是一个简单的 REST API,用于确定请求是否来自 TOR 网络。

请求是: curl -X GET http://detor.ambar.cloud/

回应是 { "sourceIp": "104.200.20.46", "destIp": "89.207.89.82", "destPort": "8080", "found": true }

于 2017-07-07T07:40:00.223 回答