2010-07-12 11 views
5

Possiedo un PC con due schede di rete collegate a reti diverse (configurazione di rete multipla). Voglio inviare frame broadcast UDP su entrambe le reti. L'indirizzo IP dei mittenti dei frame deve essere l'indirizzo IP dell'adattatore, utilizzato per inviare il frame. L'indirizzo di destinazione dovrebbe essere l'indirizzo BROADCAST LIMITATO.Invia trasmissione UDP su Windows 7

L'applicazione del cliente non deve essere eseguita con diritti amministrativi (UAC non è accettabile).

Come posso inviare questi frame UDP all'indirizzo BROADCAST LIMITATO (255.255.255.255)? Come posso inviare questi frame all'indirizzo BROADCAST DI RETE (x.y.z.255)?

So come farlo con socket non elaborati. Ma i socket raw possono essere utilizzati solo con diritti amministrativi.

risposta

3

Non è possibile aprire due socket UDP normali e collegarne uno a ciascuno degli indirizzi dell'interfaccia e quindi semplicemente inviare agli indirizzi di trasmissione?

Questo, per quanto ne so, riguarderà l'invio su entrambe le reti e farà in modo che i pacchetti inviati abbiano l'indirizzo IP corretto. Non funzionerà se si associa un singolo socket a INADDR_ANY che, naturalmente, funzionerà se nella macchina è presente un solo adattatore di rete. Per creare una soluzione completa è probabilmente meglio iterare sugli indirizzi disponibili e creare un socket per ciascuno, associare a ciascuno e inviare da ciascuno.

+1

No. Il binding di un socket influisce sui pacchetti ricevuti accettati da questo socket. I pacchetti inviati vengono instradati secondo le regole di routing IP. Posso scorrere gli adattatori e gli indirizzi IP associati a questi adattatori e inviare una trasmissione di rete per ogni indirizzo IP. Ma questo non viene inviato all'indirizzo BROADCAST LIMITATO. – harper

+0

Sei sicuro? Quando si invia un SendTo, il socket viene associato in modo implicito al socket locale che viene utilizzato per l'invio in modo che il destinatario possa rispondere. È possibile vederlo in azione poiché non è possibile eseguire una RecvFrom senza l'associazione o l'invio in precedenza sul socket ... Se si dispone di due interfacce in grado di instradare entrambi alla stessa destinazione, il sistema operativo ne seleziona una se non è vincolata. È possibile eseguire il binding prima di emettere un SendTo per selezionare l'indirizzo locale. –

+0

Ah, capisco. Hai ragione! In Windows 7 la chiamata bind() influisce sul ricevere e trasmettere dei frame. Questa è una differenza rispetto al comportamento di Windows XP, in cui i frame sono stati inviati con qualsiasi indirizzo adattatore arbitrario a tutti gli adattatori. Sono necessari socket RAW con Windows XP per inviare gli indirizzi di origine appropriati. Ma Windows 7 invia LIMITED BROADCASTS all'adattatore a cui è collegato il socket. Grazie mille, Harper – harper