Detectar todos os computadores que executam um serviço em uma rede

2

Estou tentando escrever um protocolo de sincronização de arquivos atualmente (considero um hobby, sei que há muitos sincronizadores de arquivos por aí) e queria criar uma maneira de sincronizar automaticamente as coisas uma rede. Ouvi dizer que isso pode ser feito via UDP, mas estou totalmente alheio a como realizá-lo.

Se eu usar o UDP, ainda terei que fazer ping 192.168.X.0 - 192.168.X.255? Ou o UDP encontra uma maneira de contornar isso? Existe uma maneira que eu possa de alguma forma ignorar os firewalls para que eu não precise ir a cada computador na minha rede e permitir tráfego de entrada para a porta UDP fornecida?

Perdoe-me por ser tão alheio a isso, esta é minha primeira vez tentando implementar um protocolo;)

    
por Naftuli Kay 02.12.2010 / 23:10

2 respostas

2

Você pode usar o nmap para verificar os hosts para ver se eles têm um serviço escutando em uma determinada porta.

Existem muito poucas circunstâncias nas quais UDP é preferível a TCP :

    O
  • UDP não funciona tão bem para comunicações bidirecionais. Você precisa criar sua própria associação de consulta / resposta. Mesmo quando você está enviando dados em uma direção, muitas vezes você quer que o destinatário reconheça, que é um dado enviado na outra direção.
  • O UDP não é confiável. Se um pacote for perdido ou duplicado, difícil.
  • O UDP viaja por pacote. Se o seu pacote é muito grande e é sistematicamente descartado, difícil.
  • O UDP introduz alguns problemas de segurança, como facilitar a negação distribuída de serviços. Por esse motivo, muitos firewalls bloqueiam ou restringem severamente.
  • Poucos protocolos usam TCP, portanto, os firewalls fechados por padrão simplesmente não deixam passar nada (além do DNS, que eles restringem strongmente).
  • O UDP não faz gerenciamento de congestionamentos. Se você inundar a rede, seus pacotes serão descartados aleatoriamente. O TCP, por outro lado, restringirá o débito ao que a rede pode suportar.

Você pode enviar um pacote UDP para uma máquina e ver se algo responde, é claro. Você pode até mesmo enviar um UDP broadcast e ver até onde vai, ou enviar um UDP multicast e espero que chegue.

Existem dois requisitos para um pacote de rede (UDP ou TCP) para acionar uma ação na máquina de destino. Primeiro, todos os roteadores e firewalls no caminho do pacote devem deixar o pacote chegar ao destino. Em segundo lugar, deve haver um aplicativo escutando na máquina de destino. Este pode ser o seu sincronizador, ou um serviço de partida, como inetd , ou um servidor para um protocolo de alto nível que você sincronizador se integraria em HTTP (S) ou SSH .

Se os seus pacotes estão bloqueados por um firewall, então, em princípio, não há como contornar isso. Caso contrário, o firewall simplesmente não está fazendo seu trabalho. É claro que, na prática, os firewalls têm buracos, por exemplo, UPnP (). É mais provável que você seja capaz de ignorar um firewall sobre TCP (especialmente em HTTPS, que os firewalls geralmente não podem bloquear seletivamente, por isso é necessário permitir navegação na Web) do que em UDP.

Se não houver nada escutando na porta de destino, você não poderá assumir o controle da máquina de destino para executá-la. (Isso seria o epítome da insegurança, como algumas versões antigas do Windows não corrigidas.) Essa é uma vantagem de pegar carona em um protocolo generalista comum como o SSH: basta ativar um serviço e fazer o que quiser sobre ele, incluindo a sincronização de arquivos.

    
por 03.12.2010 / 02:16
3

Se você estiver interessado apenas na rede local, e supondo que o cliente saiba o número da porta do servidor, o cliente poderia transmitir uma mensagem UDP, à qual o servidor responderia com uma mensagem unicast, estabelecendo comunicações.

Ou você pode considerar o uso de algum protocolo de descoberta existente, como o Bonjour / Zero Conf ou o UPnP (Universal Plug e Play) para localizar seus dispositivos.

Os firewalls são um problema separado, que, em qualquer caso, você deve certificar-se de que esteja aberto aos seus pacotes de descoberta.

    
por 02.12.2010 / 23:53