En una línea: tienen una lista de todos los nodos de salida (algo como que ).
más detallado:
He visto esta publicación demuestra cómo para detectar una conexión Tor en php
function IsTorExitPoint(){
if (gethostbyname(ReverseIPOctets($_SERVER['REMOTE_ADDR']).".".$_SERVER['SERVER_PORT'].".".ReverseIPOctets($_SERVER['SERVER_ADDR']).".ip-port.exitlist.torproject.org")=="127.0.0.2") {
return true;
} else {
return false;
}
}
function ReverseIPOctets($inputip){
$ipoc = explode(".",$inputip);
return $ipoc[3].".".$ipoc[2].".".$ipoc[1].".".$ipoc[0];
}
Una buena referencia explica lo que hace está disponible aquí:
Actualizar:
De la publicación oficial doc que describe el método TorDNSEL que mitiga los inconvenientes del método anterior de prueba lista de ip de exitnodes:
Es útil por varias razones para determinar si una conexión es
procedente de un nodo tor. Los primeros intentos para determinar si una determinada IP
la dirección era una salida de Tor, se usó el directorio para hacer coincidir las direcciones IP y
políticas de salida. Este enfoque tenía varios inconvenientes, incluyendo
falsos negativos cuando un enrutador Tor sale del tráfico desde una IP diferente
dirección que su puerto OR escucha. La lista de salida basada en DNS de Tor era
diseñado para superar estos problemas y proporcionar una interfaz simple para
respondiendo a la pregunta: ¿es esta una salida de Tor?
En ruby tienes una gema Tor.rb que implementa esta técnica:
Tor::DNSEL.include?("208.75.57.100") #=> true
Tor::DNSEL.include?("1.2.3.4") #=> false