2012-03-19 9 views
12

Chcę monitorować stan uruchamiania instancji Tora.Jak uzyskać adres IP węzła Tora przez port kontrolny?

Jestem już w stanie uzyskać informacje za pośrednictwem połączenia TCP z portami kontrolnymi. E.g. "GETINFO stream-status" zwraca dane, ale nie jestem w stanie określić adresu IP aktualnie wybranego węzła wyjściowego.

Po prostu można poprosić o coś takiego jak whatismyip.org, ale jest to zbyt wolne i nie skaluje się dobrze.

Jaki jest najlepszy sposób uzyskania adresu IP węzła wyjściowego połączenia Tora?

+0

Znalazłeś rozwiązanie? – Fluffy

Odpowiedz

-1

Zgodnie z protokołem sterowania Tora spec, poprawna składnia to "Adres GETINFO", który powinien renderować the best guess at our external IP address. Jeśli nie zgadujemy, zwróć błąd 551. (Dodano w 0.1.2.2-alpha)”.

+4

"Adres GETINFO" zapewnia własny adres IP (tj. Adres, który inni zobaczą, jeśli zdecydujesz się na przekaźnik). To, o co pyta plakat, to adres wyjściowy przekaźnika jego obecnych obwodów. – Damian

+0

Układy '' getinfo-state-status'' zbudowane i gotowe. Będzie zawierać nazwę LUB (nazwa routera/hop) i ID. Dzięki temu możesz uzyskać "getinfo ns/id/' 'lub' 'getinfo ns/name/' 'może pozwolić ci określić IP – gesell

8

To jest świetne pytanie! Oto krótki skrypt robi to za pomocą stem ...

from stem import CircStatus 
from stem.control import Controller 

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

    for circ in controller.get_circuits(): 
    if circ.status != CircStatus.BUILT: 
     continue 

    exit_fp, exit_nickname = circ.path[-1] 

    exit_desc = controller.get_network_status(exit_fp, None) 
    exit_address = exit_desc.address if exit_desc else 'unknown' 

    print "Exit relay" 
    print " fingerprint: %s" % exit_fp 
    print " nickname: %s" % exit_nickname 
    print " address: %s" % exit_address 
    print 

Dzięki za pytanie. Dodałem to do our FAQ.

+1

Skąd mam wiedzieć, który z tych Torów będzie używał? – Tyilo

+0

Tak, skąd wiemy, z których z nich korzysta Tor? – rdsoze

+0

W jaki sposób wykorzystanie tego python/stem przekłada się na protokół kontroli Tora? Myślę, że jest to "status obwodu GETINFO". –

0

można użyć tor control api. Ale ja nie widzę sensu.

znasz węzła wyjściowego id~name, znasz adres iP, który jest na słuchanie. nie wiem, co sieć interfac e i jaki adres IP użyje do przetworzenia zapytania.

Właśnie sprawdziłem, że około 5% węzłów wyjściowych tor używa niepublikowanych adresów IPv4.

Świat przechodzi na ipv6. Te adresy IP są tanie. Każdy węzeł wyjściowy może mieć woreczek niepoprawionych adresów IPv6.