2012-05-10 12 views
5

Questa domanda potrebbe derivare da un malinteso fondamentale del multicast IP, quindi correggimi se non sono in linea.Rilevamento dei server DHCP tramite multicast (224.0.0.12) in GNU/Linux/C

Sto provando a scrivere codice C per trovare l'indirizzo IP di tutti i server DHCP sulla rete. Il caso d'uso è questo:

  1. Trasmissioni client DHCP scoprire.
  2. Il mio agente relay proprietario preleva il pacchetto, aggiunge alcune informazioni essenziali e inoltra UNICAST al server DHCP con un indirizzo IP noto.

Il problema che sto avendo sta dicendo all'agente di inoltro dove si trova il (i) server DHCP (sono). Ho trovato che l'indirizzo multicast 224.0.0.12 è riservato da IANA per i server DHCP, quindi ho pensato di configurare solo i server per l'ascolto di quel traffico multicast. Ma ogni volta che configuro l'opzione socket Linux su IP_ADD_MEMBERSHIP su 224.0.0.12, utilizza IGMP, che è un protocollo completamente separato che non voglio implementare.

Sto semplicemente fraintendendo il funzionamento del multicast? Non dovrei essere in grado di inviare un ping dall'agente di inoltro a 224.0.0.12 e restituire una risposta ping da tutti i server DHCP?


Informazione supplementare:

  • le interfacce su tutte le caselle non hanno MULTICAST elencato quando faccio un ifconfig
  • ho aggiunto il percorso multicast utilizzando ip route add 224.0.0.0/4 dev eth0 su tutte le caselle
+0

È possibile verificare che il routing multicast sia configurato? http://www.dancres.org/bjspj/docs/docs/linux.html – ChristopheD

+0

potresti pubblicare il codice, quindi potremmo trovare un errore nell'applicazione? – dwalter

+0

È necessario utilizzare IGMP per multicast; sembra che ci sia forse un equivoco qui. Il kernel fa tutto l'IGMP per te, proprio come fa ARP e IP senza che tu te ne preoccupi. Il problema è che con la trasmissione, il routing è (abbastanza) facile: i pacchetti vanno ovunque. Tuttavia, per ricevere una risposta multicast, è necessario accettare che venga utilizzato IGMP, per comunicare ai router della rete che si è interessati ai pacchetti multicast. Se non lo dici, come fanno a sapere di inoltrare messaggi al gruppo? DHCP normalmente usa comunque la trasmissione, credo. –

risposta

2

Forse dovresti fare ciò che fanno i client - trasmettere (non multicast!) Sulla rete di destinazione con un pacchetto DHCPDISCOVER? Ho un paio di server in esecuzione, funzionanti con DHCP e nessuno di loro sta ascoltando sulla rete 224.

Probabilmente vorrai anche richiedere il tuo indirizzo esistente, o inviare lungo un DHCPRELEASE per qualsiasi offerta che torni, in modo da non legare gli indirizzi in prenotazioni false sui server.

0

In un'impostazione IPv4 generale utilizzare la trasmissione alla porta UDP 67, non multicast. Alla richiesta di trasmissione dovrebbe essere data risposta da tutti i server DHCP sulla rete. Dai uno sguardo allo details explained on the Wikipedia page o leggi la spiegazione della trasmissione in RFC 2131, Sezione 3. Vedi anche this thread.