2015-09-08 45 views
1

我正在試圖獲取Tor使用的外部IP,如here所述。當使用類似myip.dnsomatic.com的東西時,這非常緩慢。我嘗試了前面提到的鏈接(python + stem通過控制端口來控制tor)中的建議,但是你所得到的只是電路的IP,不能保證exitnode上的哪一個IP,並且有時真正的IP不是即使在結果之中。如何使用Python和Stem獲取Tor ExitNode IP

任何幫助,將不勝感激。

此外,從here,在底部,胺建議一種方法來更新Tor中的身份。有一個指令,controller.get_newnym_wait(),他用來等待,直到新的連接準備好(控制器來自控制在steam.control中),在Steam中沒有像這樣的東西(對不起,我檢查過並雙倍/三重檢查,無法找到任何東西),告訴你Tor正在改變其身份?

回答

0

您可以在不調用geoip站點的情況下獲取出口節點ip。

然而,這是一個不同的stackexchange網站在這裏 - https://tor.stackexchange.com/questions/3253/how-do-i-trap-circuit-id-none-errors-in-the-stem-script-exit-used-py

由於發表@mirimir他下面的代碼基本上是將流附加事件偵聽器的功能,然後將其用於獲取電路ID,電路指紋,最後出口ip地址 -

#!/usr/bin/python 

import functools 
import time 
from stem import StreamStatus 
from stem.control import EventType, Controller 

def main(): 
    print "Tracking requests for tor exits. Press 'enter' to end." 
    print 

    with Controller.from_port() as controller: 
    controller.authenticate() 

    stream_listener = functools.partial(stream_event, controller) 
    controller.add_event_listener(stream_listener, EventType.STREAM) 

    raw_input() # wait for user to press enter 

def stream_event(controller, event): 
    if event.status == StreamStatus.SUCCEEDED and event.circ_id: 
    circ = controller.get_circuit(event.circ_id) 
    exit_fingerprint = circ.path[-1][0] 
    exit_relay = controller.get_network_status(exit_fingerprint) 
    t = time.localtime() 

    print "datetime|%d-%02d-%02d %02d:%02d:%02d % (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) 
    print "website|%s" % (event.target) 
    print "exitip|%s" % (exit_relay.address) 
    print "exitport|%i" % (exit_relay.or_port) 
    print "fingerprint|%s" % exit_relay.fingerprint 
    print "nickname|%s" % exit_relay.nickname 
    print "locale|%s" % controller.get_info("ip-to-country/%s" % exit_relay.address, 'unknown') 
    print