2017-08-02 1 views
0

Ich aktualisiere gerade ein großes Programm von IPv4 auf IPv6.So legen Sie eine bestimmte IP-Adresse fest, wenn mehrere IPv6-Adressen an dieselbe Schnittstelle gebunden sind

In dem Teil, wo mehrere setsockopt durchgeführt werden, weiß ich nicht, wie Sie eine bestimmte Quell-IP auf die Schnittstelle einstellen.

Ich habe dies den Index der Schnittstelle zu setzen:

setsockopt(m_oClientSocket, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &uiInterfaceIndex, 
      sizeof(uiInterfaceIndex) 

Wie wird die IP ausgewählt? Nativ vom Kernel?

Danke

+0

Ich glaube nicht, dass dies etwas mit IPv4 vs IPv6 zu tun hat? Wenn Sie beim Anhören an eine bestimmte IP-Adresse binden möchten, tun Sie dies in Ihrem 'bind()' -Aufruf. – CodeCaster

Antwort

2

Wenn Sie eine bestimmte Quelladresse verwenden möchten, können Sie den bind() Aufruf verwenden, genau wie bei IPv4.

Wenn Sie möchten, dass der Kernel entscheidet, welche Quelladresse verwendet werden soll, verwenden Sie nicht bind() oder binden Sie an die nicht angegebene Adresse. Dies ist auch bei IPv4 der Fall, aber Sie haben es möglicherweise nicht bemerkt, weil Sie noch nicht mit Systemen mit mehreren IPv4-Adressen gearbeitet haben. Sie sind nicht so üblich, aber sie existieren :)

Die nicht angegebene Adresse für IPv4 ist 0.0.0.0, und für IPv6 ist es ::. In beiden Fällen ist es die Adresse "all Nullen".

Wenn Sie möchten, wie der Kernel Adressen wählt, werfen Sie einen Blick auf RFC6724. Es gibt viele Regeln, die zutreffen. Es kann ein bisschen kompliziert sein, zuerst zu verstehen, aber die Idee ist, dass der Kernel eine Adresse wählen sollte, die gerade funktioniert.

+0

Vielen Dank !! – Render

Verwandte Themen