Pregunta

¿Hay algún método conocido para encontrar pares sin usar un servidor central dedicado?

es decir: si tengo pares que se están desconectando y volviendo a conectar a Internet pero obteniendo una nueva dirección IP cada vez, y quiero conectarme a ellos sin configurar un servidor dedicado para registrarme.

Estaba pensando en usar la dirección de correo electrónico de pares para enviar periódicamente un manifiesto de pares conectados, con algún tipo de código de tiempo, negando la necesidad de un servidor dedicado. Esto sería un inconveniente si ninguno de los pares pudiera conectarse después de probar todas las direcciones de pares conocidas previamente. Pero los modelos existentes de búsqueda de pares serían preferibles.

¿Fue útil?

Solución

No hay forma de evitar tener que conocer al menos un par inicial para descubrir más. Los protocolos P2P completos, como Gnutella o Gnutella2, o el Overnet más simple (popularizado por Storm Worm), se basan en que cada cliente tenga una lista de inicio de algunos pares. Estos pueden salir de un rastreador automatizado basado en la web, por ejemplo. El cliente descubrirá toda la red o partes de ella solicitando a otros pares más direcciones, por ejemplo, al delegar una búsqueda de archivos.

Si realmente no puede tener ningún tipo de recurso centralizado, lo mejor que puede hacer es encontrar el primer par a través de mensajes transmitidos y, en última instancia, el escaneo de direcciones IP. El primer enfoque tiene buenas intenciones, pero en al menos el 98% de los casos no dará ningún resultado. El enfoque posterior, por supuesto, es abusar de Internet, así como ilegal en la mayoría de los países.

Realmente repensaría tener algún tipo de rastreador central. Puede ser algo tan simple como un script PHP en un servidor web (la red gnutella, hoy en día, está sostenida por veinte veinte scripts de este tipo, alojados por personas que ni siquiera se conocen). Y esto seguramente es más liviano que el correo electrónico (que, al menos debido a los filtros de spam, no funcionaría de todos modos).

Otros consejos

En el caso limitado de pares dentro de una intranet, es posible enviar un mensaje UDP de difusión a un puerto conocido pidiendo a los pares que informen.

Aproveche cualquier foro existente donde se puedan publicar datos. Piense en el canal secreto de IRC, incrustando datos en fotos y publicando en sitios para compartir fotos 4chan ?, cualquier sitio que permita que su aplicación inicie sesión y publique datos sin inicios de sesión de captia, etc.

http://chatzilla.hacksrus.com/faq/#password

Otra estrategia podría ser incrustar mensajes en transacciones de moneda digital. Elija una moneda barata que pueda quedarse ... Moneda DOGE o MOON tal vez. Cree la funcionalidad de billetera en su aplicación. de modo que pueda publicar micro transacciones de un lado a otro entre las direcciones que controla su aplicación. Todavía habría una tarifa para mineros, pero esto es solo fracciones de centavos. Incluso si luego prohíben agregar metadatos a las transacciones, puede realizar una transacción equivalente a su dirección IP en MOON y usar direcciones de vanidad en MOON coin para su aplicación. de modo que cuando un nuevo nodo se conecta, sabe qué buscar en la cadena de bloques: 2daMOON% bootStr @ pM3. ENVIAR - 104.003021133 MOON IP = 104.3.21.133 no es una propuesta costosa.

El cliente BitcoinQT usa una variedad de métodos para encontrar nodos, algunos de ellos pueden ser útiles para usted.

Descubrimiento del nodo del cliente Satoshi

IRC ya no se usa, pero podría ser el más fácil de implementar:

  

A partir de la versión 0.6.x, el cliente de Bitcoin ya no utiliza el arranque de IRC por defecto, y a partir de la versión 0.8.2, el soporte para el arranque de IRC se ha eliminado por completo. La siguiente documentación es precisa para la mayoría de las versiones anteriores.

     

Además de aprender y compartir su propia dirección, el nodo aprendió sobre otras direcciones de nodo a través de un canal IRC. Consulte irc.cpp .

     

Después de aprender su propia dirección, un nodo codificó su propia dirección en una cadena para usar como apodo. Luego, se unió al azar a un canal IRC llamado entre # bitcoin00 y # bitcoin99. Luego emitió un comando de la OMS. El hilo leyó las líneas tal como aparecían en el canal y decodificó las direcciones IP de otros nodos en el canal. Lo hizo en un bucle, para siempre, hasta que el nodo se apagó.

     

Cuando el cliente descubrió una dirección de IRC, estableció la marca de tiempo en la dirección a la hora actual, pero usó una "penalización". de 51 minutos, lo que significa que parecía que se había visto casi una hora antes.

Tres maneras, fuera de mi cabeza, aunque siempre necesitarás un servidor central para iniciar la conexión a menos que hayas elegido la opción 3.

  • Servidor central que mantiene una lista conocida de pares, con keep-alive.
  • Uno o más servidores centrales que mantienen algunos recursos comunes que sus pares pueden usar para descubrirse entre sí, pero una vez conectados ya no necesitan el servidor central mientras el par permanezca conectado (algo así como BitTorrent); también puede encadenar conexiones pares.
  • Escaneo de puertos / IP ( no muy recomendable ).

En su ejemplo, todavía tendría algún tipo de servidor central donde se registrarían los pares; el protocolo es la única diferencia.

Antigua pregunta, pero yo mismo he estado pensando en este problema, así que agregaré mis 2 centavos. En resumen, no se requiere un servidor central si un nodo conoce al menos un igual válido. Cualquier miembro actual debe agregar nuevos nodos a la red (por ejemplo, invitados, o el nodo genera otro nodo, dependiendo de su aplicación).

Suponiendo que:

  • los agentes realizan un seguimiento de sus compañeros; el tamaño de esta libreta de direcciones y cómo se administran las entradas dependerá de la naturaleza del sistema; p.ej. cuánto tiempo permanecen conectados los pares, si los pares usan direcciones estables

  • los agentes comparten información de pares con otros pares

  • al menos algunos agentes permanecen disponibles durante períodos de tiempo relativamente largos en relación con el nodo de frecuencia se conecta a la red para actualizar su libreta de direcciones (o los nodos tienen direcciones estables)

  • además de las direcciones de pares, también se rastrea la información de disponibilidad (muchas opciones aquí dependiendo de su sistema. Los ejemplos incluyen: si el par tiene una dirección estable, cuando se vio por última vez, alguna métrica de disponibilidad, información de tipo de contenido / servicio, dirección válida hasta el momento si se conoce)

  • los nuevos agentes se inicializan con al menos un igual válido (no tiene que ser un nodo central, puede ser cualquier nodo válido)

  • Se requerirán
  • mecanismos de confianza si los pares malintencionados son una posibilidad

Cuando un par se conecta, consulta a los pares en su tabla de pares para descubrir cuáles están activos y quizás elimina las direcciones dinámicas caducadas. Los nodos intercambian información de pares y pueden vincularse ellos mismos. Este descubrimiento / intercambio de pares puede continuar un cierto número de saltos o mediante una caminata aleatoria hasta la lista de pares si es de tamaño y / o calidad suficientes.

Algunos detalles más:

  • Los nodos se conectan y comparten información de pares con frecuencia relacionada con la frecuencia con la que cambian las direcciones de los nodos, por lo que la libreta de direcciones no se vuelve obsoleta y el nodo se desconecta porque ninguno de sus antiguos pares está disponible en sus últimas direcciones conocidas

  • Los nodos pueden necesitar limitar el número de pares que aceptan, para evitar la tendencia hacia la centralización alrededor de los nodos más estables.

  • Los nodos deben ser selectivos sobre los pares que mantienen; es decir, aquellos en los que es más probable que intercambien datos (por ejemplo, el peso basado en el historial)

  • Los enlaces de nodo pueden ser asimétricos o simétricos según la aplicación

Para decirlo simplemente no, no hay forma de hacerlo sin un servidor central.

Si desea hacer esto, simplemente necesita uno o más servidores centrales, ya sea mediante dns dinámico o no. Los clientes necesitan un método para descubrir a dónde deben conectarse, y la única forma verdaderamente sensata de hacerlo es con su propio servidor, en el escenario más simple, solo necesita enviar una dirección IP en respuesta.

Se pueden obtener servidores virtuales por alrededor de $ 15 / mes, lo que es mucho más económico que tratar de usar o abusar del ancho de banda de otra persona.


[Editar].

En pocas palabras, hay otra forma, como sigue.

Después de reflexionar, creo que lo que haría es designar un conjunto de pares como controladores de clúster y usar un servicio DNS dinámico para permitir que otros pares descubran los controladores de clúster.

Elija un proveedor de DNS dinámico. Lo llamaré myc.ath.cx (uso http: // www. dyndns.com/ ).

Cada par debe ser capaz de convertirse en un controlador de clúster. Un controlador de clúster contendrá una lista de todos los demás pares conectados.

Cuando se inicia un par, busca myc.ath.cx e intenta conectarse. Si no se puede establecer la conexión dentro de un período, digamos 30 segundos, se hace cargo del registro de la entrada DNS.

Cualquier par que desee descubrir otros pares simplemente puede consultar myc.ath.cx y se proporcionará una lista

Todos los pares son responsables de descargar periódicamente la lista de pares, en caso de que necesiten agrupar el controlador.

El controlador del clúster consultará periódicamente la entrada DNS; si ha cambiado desde su dirección IP, entonces sabe que ya no es el controlador del clúster, por lo que se pondrá en contacto con el controlador del clúster que actualmente tiene la entrada DNS y proporcionará su lista de hosts conocidos.

El controlador del clúster se comunicará periódicamente con los hosts de la lista para garantizar que sigan siendo válidos.

Sin embargo, su método de envío de correo electrónico utiliza un servidor dedicado; el servidor de correo electrónico del par, para ser precisos.

Aproximadamente, no creo que sea posible sin usar algún tipo de almacenamiento o servidor dedicado (lo que hace el enfoque de correo electrónico, aunque sea oblicuamente) A MENOS que sea capaz de caracterizar la conectividad a Internet que usan sus pares.

Básicamente, si tiene un conjunto de X número de pares, que se conectan por una cantidad de tiempo Y, y luego están fuera de la red por una cantidad de tiempo Z ... esencialmente, puede construir una ecuación de probabilidad sobre la probabilidad es que el conjunto de pares con el que contactó por última vez todavía está disponible; donde esa probabilidad se aproxima a 1 (para un conjunto dado de X, Y y Z arriba), lo más probable es que pueda mantener una red punto a punto sin usar almacenamiento.

Posiblemente más en el espíritu; en lugar de tener un "servidor central dedicado", use un servicio simple en línea gratuito para especificar una lista de pares. Establecer un grupo de Yahoo, o algo así; los clientes pueden buscarlo automáticamente y obtener una dirección de pares desde la cual consultar un conjunto de pares; el cliente puede codificarse con la autenticación para publicar en el grupo, y puede publicar periódicamente su dirección IP para que otros puedan solicitar el conjunto de pares activos conocidos.

Si quieres ponerte realmente complicado, puedes comenzar a usar métodos básicamente esteganográficos para ocultar información de ubicación de pares. Es decir. obtener una búsqueda en google de "bla" encuentre el primer sitio listado en los resultados que tiene un tablero de mensajes desprotegido (sin CAPTCHA); encuentre la tercera publicación (o lo que sea) que comience con " Indubitablemente " (o lo que sea), y encuentre el encabezado del primer mensaje allí, y allí está la dirección IP de un par. Si eso no funciona, vaya a la lista de términos de búsqueda al siguiente.

Pero eso es astuto. :-)

¿Podría reutilizar un servidor dedicado existente para este propósito?

Estoy pensando en particular en registrar a cada uno de los pares con un DNS dinámico, pero si estaba dispuesto a ponerse un poco más feo, compartir el acceso a una cuenta conocida de Hotmail o Google Doc o similar.

Puede usar un directorio central o algún tipo de protocolo de difusión para el descubrimiento de servicios. Suponiendo que Google los pueda indexar, podría concebir un sistema mediante el cual cada par ejecute un sitio web con algunas palabras únicas y raras contenidas en una página específica. Luego, podría usar los resultados de búsqueda de Google basados ??en estas palabras para identificar posibles pares. Esto sería esencialmente una transmisión por Internet (ruidosa y lenta).

Si la estructura de la página fuera un patrón bien conocido o contuviera información de conexión identificable para ese par, sería fácil distinguirlos en los resultados de búsqueda. El uso de un directorio público de este tipo lo deja abierto a los nodos comprometidos en la red que se forma, pero esto es más o menos cierto para cualquier red P2P sin algún mecanismo de seguridad.

Hacer que los sitios web sean rastreados y altamente clasificados por Google (o algún otro motor de búsqueda) para su conjunto arcano particular de términos de búsqueda sería el truco. Puedo pensar en un par de formas, pero no son las que yo usaría. Para un servicio legítimo, prefiero gastar el dinero o encontrar un sitio web gratuito que pueda funcionar como un directorio.

¿Qué pasa con otro sistema P2P creado específicamente para rastrear pares en línea de otros sistemas P2P?

Luego reducimos el problema de encontrar pares para cualquier nuevo sistema P2P a simplemente encontrar pares para el sistema P2P 'principal', que le dará las direcciones de pares en línea para el sistema que le interesa usar ...

Este es un uso típico de un algoritmo de tabla hash distribuida. Sugeriría mirar algo como pastelería. Utiliza una red superpuesta (red de capa de aplicación) sobre otras capas.

Cada nodo tiene un GUID que se utiliza para enrutar solicitudes a través de la red de igual.

Si está buscando un servidor central ya establecido, vea la entrada de metaserver en la página aquí:
http://martindevans.appspot.com/
Puede registrar pares allí y luego otros pares pueden encontrarlos. Obviamente este es un servidor central, pero no requiere mantenimiento de su parte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top