Rileva tutti i computer che eseguono un servizio su una rete


2

Sto provando a scrivere un protocollo di sincronizzazione dei file al momento (consideralo un hobby, so che ci sono molti sincronizzatori di file là fuori) e volevo creare un modo per sincronizzare automaticamente le cose attraverso una rete. Ho sentito che questo può essere realizzato tramite UDP, ma sono totalmente ignaro di come realizzarlo.

Se uso UDP, dovrò comunque eseguire il ping 192.168.X.0 - 192.168.X.255? O UDP trova un modo per aggirare questo? C'è un modo in cui posso in qualche modo bypassare i firewall in modo da non dover andare su ogni computer della mia rete e consentire il traffico in entrata verso la porta UDP data?

Perdonami per essere stato così ignaro di ciò, questa è la prima volta che cerco di implementare un protocollo;)

Risposte:


2

Puoi usare nmap per scansionare gli host per vedere se hanno un servizio in ascolto su una determinata porta.


Esistono pochissime circostanze in cui UDP è preferibile a TCP :

  • UDP non funziona così bene per le comunicazioni a due vie. Devi creare la tua associazione query / risposta. Anche quando si inviano dati in una direzione, spesso si desidera che il destinatario riconosca, che è un dato inviato nell'altra direzione.
  • UDP non è affidabile. Se un pacchetto viene perso o duplicato, difficile.
  • UDP viaggia per pacchetto. Se il tuo pacchetto è troppo grande e viene sistematicamente scartato, difficile.
  • UDP introduce alcuni problemi di sicurezza, come semplificare la negazione del servizio distribuito. Per questo motivo molti firewall lo bloccano o lo limitano gravemente.
  • Pochi protocolli utilizzano TCP, quindi i firewall chiusi per impostazione predefinita non ne consentono il passaggio (a parte il DNS, che vincolano strettamente).
  • UDP non gestisce la congestione. Se si inonda la rete, i pacchetti verranno eliminati in modo casuale. TCP, d'altra parte, limiterà il debito a ciò che la rete può sopportare.

Puoi inviare un pacchetto UDP a una macchina e vedere se qualcosa risponde, ovviamente. Puoi persino inviare una trasmissione UDP e vedere fino a dove arriva, oppure inviare un multicast UDP e sperare che arrivi.

Esistono due requisiti per un pacchetto di rete (UDP o TCP) per attivare un'azione sul computer di destinazione. Innanzitutto, tutti i router e i firewall sul percorso del pacchetto devono aver lasciato passare il pacchetto alla destinazione. In secondo luogo, deve esserci un'applicazione in ascolto sul computer di destinazione. Questo potrebbe essere il tuo sincronizzatore, o un avviatore di servizio come inetd o un server per un protocollo di livello superiore che il sincronizzatore dovrebbe incorporare come HTTP (S) o SSH .

Se i tuoi pacchetti sono bloccati da un firewall, in linea di principio non c'è modo di aggirare il problema. Altrimenti il ​​firewall non sta facendo il suo lavoro. Naturalmente, in pratica, i firewall hanno buchi, ad esempio UPnP (). È più probabile che tu sia in grado di bypassare un firewall su TCP (specialmente su HTTPS, che i firewall generalmente non possono bloccare in modo selettivo, quindi devi consentire l'autorizzazione alla navigazione web) che su UDP.

Se non c'è nulla in ascolto sulla porta di destinazione, di nuovo, non sarai in grado di assumere il controllo del computer di destinazione per farlo eseguire l'applicazione. (Sarebbe l'epitome dell'insicurezza, come alcune vecchie versioni senza patch di Windows.) Questo è un vantaggio di piggyback su un protocollo generalista comune come SSH: devi solo abilitare un servizio e quindi puoi fare quello che vuoi su di esso, compresa la sincronizzazione dei file.


3

Se sei interessato solo alla rete locale e supponendo che il client conosca il numero di porta del server, il client potrebbe trasmettere un messaggio UDP, al quale il server risponderebbe con un messaggio unicast, stabilendo così le comunicazioni.

Oppure, potresti prendere in considerazione l'utilizzo di alcuni protocolli di rilevamento esistenti, come Bonjour / Zero Conf o UPnP (Universal Plug 'n Play) per individuare i tuoi dispositivi.

I firewall sono un problema separato, che in ogni caso è necessario assicurarsi che siano aperti ai pacchetti di individuazione.


Eccellente, quindi un messaggio UDP colpirebbe praticamente tutti nella mia rete su una porta UDP specificata? Inoltre, come funzionano questi protocolli di rilevamento? Le scrivo nella mia applicazione o sono basate su router? Leggere la documentazione mi ha confuso ancora di più di quanto non fossi già :-(
Naftuli Kay il

Sì - una trasmissione va a tutti gli utenti della rete tutti sulla stessa porta. Per quanto riguarda il funzionamento dei protocolli di scoperta, spero che qualcun altro possa rispondere. Non li ho mai usati.
Jamie Cox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.