自动生成tor出口节点列表

时间:2013-06-07 06:49:07

标签: python tor

我想自动生成可以到达某个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。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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's FAQ

答案 2 :(得分:0)

Herehttps://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 }