Pergunta

Estou projetando um P2P Aplicação que funciona na porta 30000. Meu roteador não é Upnp Então, eu precisava encaminhar uma porta para o roteador. Mas Skype Um outro aplicativo P2P Funciona sem encaminhamento de porta no meu PC. Quando o analisei com o Wireshark, encontrei o uso da porta UDP 48980, 58544. Estou usando C ++.

Há uma biblioteca em Python aqui Qual faz isso por Roteadores NAT PNP. É possível fazer uma porta programaticamente para a frente para o roteador Independentemente do tipo de roteador e sistema operacional. Qual deve ser a abordagem para fazê -lo em C ++ ou em qualquer outro idioma.

Foi útil?

Solução

O Skype funciona de uma maneira muito interessante. Pelo que li (e isso há algum tempo atrás), funciona da seguinte maneira:

  • O Skype Server mantém uma lista de todos os usuários e IPs.
  • Usuário do Skype A quer falar com o usuário B
  • O usuário do Skype A envia um pacote de rede para o endereço IP do usuário B e aguarda uma resposta. (O usuário B nunca recebe este pacote).
  • Usuário do Skype a notifica o servidor de combinação de IP/porta na qual está aguardando uma resposta
  • O servidor notifica o usuário B para enviar uma resposta ao usuário A na porta especificada
  • Uma conexão é feita.

Provavelmente, isso é simplificado demais, mas pela última vez eu verifiquei, é assim que funciona. (Alguém me corrige se eu estiver errado).

Editar: Problema de bala fixa

Outras dicas

Punchamento de orifício UDP é (uma) de maneiras como atravessar o NAT.

Você precisa usar um servidor intermediário e iniciar a comunicação do lado do cliente. Como Yossarian mencionou, a partir desse ponto, uma possibilidade é o soco no buraco da UDP. Dependendo do tipo de aplicativo (e se é realmente P2P ou não), você pode manter o servidor intermediário em vigor o tempo todo.

O Skype usa outros pares como ponto intermediário quando a conexão direta não é possível.

ou seja, o Peer A deseja se conectar ao par B, mas o Peer B tem todas as portas fechadas, então a comunicação é iniciada através do par C, que possui portas abertas.

Tenha alguma experiência na implementação de aplicativos P2P e fazê -los trabalhar atrás de roteadores NAT.

O Skype usa o soco do buraco do UDP para funcionar atrás de roteadores NAT. Escrevi um artigo e fiz um vídeo de demonstração para ajudar outras pessoas a implementar aplicativos semelhantes. Também forneceu links para bibliotecas úteis que fazem a maior parte do solo, como a libutp, aqui.

>>> Vídeo da demonstração de perfuração do UDP e libs úteis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top