Una solución potencial podría ser confiar en servidores intermediarios y no permitir la comunicación P2P para clientes que no son de confianza.
Digamos que es un programa de chat (como Skype), el cliente al mismo tiempo se convierte en un servidor intermediario en la red y puede transmitir datos entre otros clientes.
Para que alguien se ponga en contacto con usted, primero debe buscar la IP de los nodos intermediarios a los que está conectado (a través de un DHT o algo similar) y luego enviar todo lo que quiera decirle a ese nodo, que se lo transmitirá a usted. Ninguna posibilidad de DoS aquí, ya que la reducción del nodo no servirá de nada, y su cliente se volverá a conectar de inmediato a otro diferente.
Una vez que los datos lleguen a usted (a través del intermediario), digamos que fue una solicitud de contacto / chat y usted lo aceptó. En este punto, confía en esa persona para que no haga nada malicioso y le proporciona su IP (a través del intermediario, como siempre), y luego se conecta directamente con usted. Además, si fue una solicitud de contacto, su cliente también guarda su clave pública, lo que significa que la próxima vez que la persona se conecte, todo el proceso se realizará automáticamente y su cliente le dará su IP de inmediato (a través de un intermediario, como siempre).
Esto puede eventualmente frustrarse inundando la red con clientes maliciosos (que actuarán como nodos intermedios pero no respetarán la confidencialidad de las IP de otros nodos) pero una vez que el software se haga popular y haya suficientes nodos legítimos, será muy difícil de hacer eso (piensa en un ataque de Sybil en Tor).