Questa domanda può essere trattata come una domanda sorella di previous one inviata da me stesso. È molto noioso che quando si desidera associare un indirizzo locale di collegamento a un socket IPv6, è necessario impostare il campo sin6_scope_id
della struttura . Mi chiedo se qualcuno possa fornire una soluzione seguendo le buone pratiche.come associare un indirizzo locale di collegamento a una presa IPv6
risposta
L'indirizzo locale del collegamento IPv6 non è univoco sul nodo, è univoco per la NIC, motivo per cui è necessario specificare l'ID dell'ambito. In altre parole è perfettamente valido avere più adattatori con esattamente lo stesso indirizzo IPv6.
Ciò significa che è necessario immettere come input l'id-obiettivo o il modulo di testo appropriato (% eth0,% 1) che è possibile passare a getaddrinfo()
.
Un metodo consiste nel prendere un indirizzo IPv6 di collegamento locale, enumerare le interfacce e se solo una corrispondenza lo utilizza, se più di una corrispondenza si blocca con un elenco di interfacce e ottenere all'utente di specificare quale in modulo completo.
Il problema si verifica solo quando si esegue l'hardcode di un indirizzo locale di collegamento, che non è realmente una soluzione pratica per un'app non banale.
In caso contrario, si dovrebbe essere sempre il tuo sockaddr
di legare da getifaddrs()
, che riempirà il campo di applicazione id per voi (ad es. Si può permettere che la tua all'utente di specificare un nome di interfaccia, quindi cercare attraverso la lista restituita da getifaddrs()
di trovare l'indirizzo locale di collegamento associato a tale interfaccia).
per IPv6 link-indirizzi locali (fe80::/10
prefisso), il membro sin6_scope_id
nella struttura è il numero di interfaccia e si può ottenere questo numero per
if_nametoindex(const char *ifname);
- 1. Perché associare un socket a un indirizzo?
- 2. Presa IPv6 su Android
- 3. Perché non è possibile legare presa ipv6 a un indirizzo linklocal
- 4. Come convertire un indirizzo da IPv4 a IPv6
- 5. expressjs associare a un indirizzo IP specifico
- 6. Intrecciato: come associare un server a un indirizzo IP specificato?
- 7. Corrispondenza dell'indirizzo IPv6 a una subnet CIDR
- 8. Associare l'indirizzo IPv6 al socket Python come indirizzo IP di origine
- 9. rilevare indirizzo IPv6 temporaneo crossplatform
- 10. IPV6 link multicasting locale
- 11. WP7 Collegamento a variabile locale
- 12. Assegna indirizzo ipv6 usando ioctl
- 13. Come posso associare serverocket a un IP specifico?
- 14. Collegamento di una porta alla presa di un datagramma su un IP diverso
- 15. PHP e PDO: connessione a MySQL tramite indirizzo IPv6
- 16. Indirizzo IPv6 in base al nome host
- 17. Come associare un dominio di testo a una cartella locale per gettext in GTK3
- 18. Aggiunta dell'indirizzo locale del collegamento
- 19. Uno strumento da riga di comando Unix standard per il collegamento a una presa
- 20. Indicare se una stringa di testo è un indirizzo IPv6 o un indirizzo IPv4 utilizzando l'API C socket standard
- 21. Come determinare se una stringa è un indirizzo IPv4 o IPv6 valido in C#?
- 22. come funziona l'ascolto di una presa
- 23. Come posso convertire l'indirizzo IPV6 in indirizzo IPV4?
- 24. Python: associare una funzione a un tasto
- 25. Uccisione di una presa UDP bloccata
- 26. Associare una ObservableCollection a un ListView
- 27. Come creare un collegamento a una directory
- 28. connect() restituisce "argomento non valido" con indirizzo ipv6
- 29. Come associare un gridview a un ExpandoObject
- 30. Come associare QModelIndex a una nuova riga?
L'indirizzo locale è formato da suo prefisso di routing e l'indirizzo MAC dell'interfaccia. Quindi se più adattatori sono disponibili sullo stesso host, ogni scheda di rete ha un indirizzo di collegamento locale diverso. – zeekvfu
@Zind si assume erroneamente che ogni interfaccia abbia un indirizzo MAC univoco. Vedi l'hardware di Sun per un contro-esempio. –