Esiste un modo affidabile in Windows, oltre a modificare la tabella di routing, per forzare un socket appena creato a utilizzare un'interfaccia di rete specifica? Capisco che bind()
per l'indirizzo IP dell'interfaccia non garantisce questo.Utilizzo di una specifica interfaccia di rete per un socket in windows
risposta
(seconda volta Ok fortunato ..)
FYI c'è un'altra domanda qui perform connect() on specific network adapter lungo le stesse linee ...
Secondo The Cable Guy
Windows XP e Windows Server® 2003 utilizzare il modello host debole per le mandate e riceve per tutte le interfacce IPv4 e il modello di host forte per le mandate e riceve per tutto IPv6 interfacce. non è possibile configurare questo comportamento. Lo stack TCP/IP Next Generation in Windows Vista e Windows Server 2008 supporta forte ospite invia e riceve sia per IPv4 e IPv6 per default su tutte le interfacce tranne l' Teredo interfaccia di tunneling per un relè Teredo host-specifica.
Quindi per rispondere alla domanda (correttamente, questa volta) in Windows XP e Windows Server 2003 IP4 no, ma per IP6 sì. E per Windows Vista e Windows 2008 sì (tranne alcune circostanze).
anche da http://www.codeguru.com/forum/showthread.php?t=487139
In Windows, una chiamata a bind() colpisce selezione carta solo il traffico in entrata, traffico non in uscita. Così, su un client in esecuzione in un sistema multi-homed (cioè, più di una scheda di interfaccia), è lo stack di rete che seleziona la carta da usare, e fa la sua selezione basata esclusivamente sulla IP di destinazione , che a sua volta è basato su nella tabella di routing. Una chiamata a bind() non influisce in alcun modo sulla scelta della carta .
Ha qualcosa a che fare con qualcosa chiamato "Sistema di fine debole" ("Debole E/S") modello. Vista modificata in un modello E/S forte , pertanto il problema potrebbe essere non presente in Vista. Ma tutte le versioni precedenti di di Windows utilizzavano il modello E/S debole .
Con un modello debole E/S, è la tabella di routing che decide quale carta viene utilizzato per il traffico in uscita in un sistema multihomed .
Vedere se questi fili offrono alcuni intuizione:
"presa locale vincolante per multihomed host di Windows XP non funziona" a http://www.codeguru.com/forum/showthread.php?t=452337
"Come collegare una porta a un determinato networkcard ?" a http://www.codeguru.com/forum/showthread.php?t=451117. Questo thread menziona la funzione CreateIpForwardEntry(), che (credo) può essere utilizzato per creare un voce nella tabella di routing in modo che tutto il traffico IP in uscita con un server specificato viene instradato attraverso un adattatore specificato.
"Lavorare con le schede 2 Ethernet" a http://www.codeguru.com/forum/showthread.php?t=448863
"comportamento legano Strano il multihomed sistema " presso http://www.codeguru.com/forum/showthread.php?t=452368
Speranza che aiuta!
- 1. HttpURLConnection e utilizzo di una specifica scheda di rete
- 2. binding socket all'interfaccia di rete
- 3. Set Interfaccia di rete Metrica
- 4. Utilizzo di rete in cattività
- 5. Utilizzo di una pagina flat specifica in un modello
- 6. interfaccia di rete ritrovamento Java per gateway predefinito
- 7. come associare il socket raw all'interfaccia specifica
- 8. HttpClient: un solo utilizzo di ogni indirizzo socket (protocollo/indirizzo di rete/porta) è normalmente consentito
- 9. Come ottenere nomi di interfaccia di rete significativi invece di GUID con netifaces in Windows?
- 10. Virtual box Solo host Interfaccia di rete
- 11. Specifica l'interfaccia di rete a cui un multicast UDP deve connettersi in .NET
- 12. Errore casella virtuale "Interfaccia di rete inesistente"
- 13. Come scegliere quale interfaccia di rete utilizzare?
- 14. come utilizzare cURL sulla specifica interfaccia
- 15. Utilizzo di gprof con socket
- 16. Ricezione di dati multicast su interfaccia specifica
- 17. Calcola CIDR da una maschera di rete specifica - Java
- 18. Android: utilizzo della rete in un servizio
- 19. Annunci in un'applicazione Windows. Suggerisci una rete pubblicitaria, per favore
- 20. Automazione interfaccia utente di Windows
- 21. Aumentare la finestra di ricezione TCP per una presa specifica
- 22. Utilizzo di Gson con tipi di interfaccia
- 23. Mongongo shell mongo: è consentito un solo utilizzo di ciascun indirizzo socket (protocollo/indirizzo di rete/porta). per socket: 0.0.0.0:27017
- 24. NodeJS, OpenCV e streaming di immagini tramite socket di rete
- 25. Utilizzo di Fiddler con autenticazione di Windows
- 26. Utilizzo di un Kinect per Windows per due processi paralleli
- 27. come giocare un suono errore di Windows specifica in C#
- 28. Interfaccia a riga di comando di Windows 8 Simulator
- 29. Utilizzo di processo di rete con PowerShell
- 30. Utilizzo del filtro zlib con una coppia di socket
Grazie, A meno che non manchi qualcosa, nessuna risposta è pertinente, poiché SO_BINDTODEVICE non è rilevante per Windows. Sospetto che il tuo riassunto sia corretto, anche se non ho le prove. – Ofir
Oops right you are! Aggiornato la mia risposta sopra con informazioni migliori - scusa! – Ezz
Si noti che i modelli host deboli e forti non influiscono sul modo in cui il traffico inviato da un socket viene instradato. Cioè il robusto modello host garantisce che il traffico in uscita da una scheda di rete utilizzi l'indirizzo IP assegnato dall'adattatore, ma non influisce sul modo in cui lo stack di rete nell'host seleziona automaticamente l'adattatore in uscita. Questo è in realtà spiegato nel link "The Cable Guy" sopra, così come su Wikipedia: https://en.wikipedia.org/wiki/Host_model –