Tor semplicemente ripete le richieste come proxy HTTP anonimo trasparente, il che significa che non allega intestazioni proxy tipiche (come Via
o X-Forwarded-For
), o in qualsiasi altro modo modifica le richieste o le risposte HTTP (oltre ad essere "onion routed, encrypted and decrypted" attraverso la rete Tor).
Come per identificare i client che si connettono attraverso la rete Tor, il modo più semplice per rilevare tali client sul server web è interrogare il pubblico Servizio TorDNSEL che pubblica i nodi di uscita di Tor:
TorDNSEL is an active testing, DNS-based list of Tor exit nodes. Since
Tor supports exit policies, a network service's Tor exit list is a
function of its IP address and port. Unlike with traditional DNSxLs,
services need to provide that information in their queries.
Previous DNSELs scraped Tor's network directory for exit node IP
addresses, but this method fails to list nodes that don't advertise
their exit address in the directory. TorDNSEL actively tests through
these nodes to provide a more accurate list.
Questa query di TorDNSEL può essere automatizzata, ad es. nella tua applicazione web e codice di esempio in molti linguaggi di programmazione possono essere trovati su Internet. Ad esempio, ecco alcuni esempi di codice che dimostrano come per farlo in PHP.
Se hai intenzione di implementare questa verifica Tor nella tua applicazione web, allora ti consiglio di memorizzare i risultati delle query nella cache localmente per un po 'di tempo, è ragionevole aspettarsi che i nodi di uscita non cambino nel frattempo, non ripetere costantemente le stesse query e aggiungi un ulteriore ritardo alle tue risposte.
Modifica per aggiungere : un altro modo per ottimizzare questo interrogazione del nodo di uscita Tor ed evitare l'utilizzo di TorDNSEL per tutto il tempo è fare un reverse DNS lookup in anticipo, e cercare di farlo corrispondere a un elenco dei principali host di nodi di uscita Tor noti. Questo può essere effettivamente molto efficace, poiché molti host di nodi di uscita importanti non cambiano mai e possono gestire un numero elevato di nodi di uscita utilizzando tutti nomi di nomi RDNS uguali o simili. Ad esempio, è possibile provare ad associare i nomi rDNS al proprio elenco utilizzando espressioni regolari, LIKE
operatore SQL o simili. Alcuni degli host del nodo di uscita Tor noti (esempi reali) corrisponderanno a questi nomi:
tor[0-9].*
tor-exit*
*.torservers.*
*.torland.is
Questa è la lista che sto usando. Come vedi, è lontano dall'essere completo, ma è un inizio e puoi sempre aggiungere più voci mentre li rilevi per seguire uno schema facilmente abbinabile. Dato che si tratta di ottimizzare semplicemente le query, non ha davvero bisogno di essere completo, ma ogni partita sicuramente accelererà le cose. Spero che questo aiuti!