Ich habe zwei Netzwerkschnittstellen auf meinem Computer (eth0 und eth1) und ich versuche, eine Verbindung mit einem bestimmten (eth1) zu wählen. Angesichts der Aussage, dass Go eine Systemsprache ist, nahm ich das an, aber ist das mit der aktuellen Standardbibliothek wirklich möglich?Wählen mit einer bestimmten Adresse/Schnittstelle? Golang
Bisher habe ich bekam InterfaceByName
die Schnittstelle von Namen zu bekommen (eth1
), dann reichen ich über die Addrs
Verfahren und extrahiert die erste Adresse [0], die die Quelladresse von eth1 Schnittstelle zu sein scheint (zB xxx.xxx .xxx/24); der andere ist die IPv6-Adresse.
Ich habe eine neue Dialer
erstellt und Dialer.LocalAddr
mit der Adresse extrahiert. Ich erhalte jedoch diesen Fehler mismatched local address type
wich auf dialSingle Funktion von dial.go
bearbeiten einige Code im Zusammenhang scheint:
package main
import (
"net"
"log"
)
func main(){
ief, err := net.InterfaceByName("eth1")
if err !=nil{
log.Fatal(err)
}
addrs, err := ief.Addrs()
if err !=nil{
log.Fatal(err)
}
d := net.Dialer{LocalAddr: addrs[0]}
_, err = d.Dial("tcp", "google.com:80")
if err != nil {
log.Fatal(err)
}
}
Ausgang: 2014/12/10 17:11:48 dial tcp 216.58.208.32:80: mismatched local address type ip+net
behaupten ich Probleme reproduzieren diese habe - können Sie zeigen ein Beispiel dafür, wie bist du die Adresse bekommen und die Schaffung der Dialer ? – JimB
@ JimB danke für den Blick darauf. Ich habe einen Code geschrieben. Es scheint, dass ich den Fehler unabhängig von der Adresse/Schnittstelle erhalte, die ich benutze, also kann ich nur annehmen, dass die Adresse, die ich in der "Dialer.LocalAddr" zur Verfügung stellte, nicht von der Form ist, die sie erwartet, kompiliert. Ich habe untersucht und es scheint, dass der von Go zugewiesene Standardtyp die gleiche IP-Adresse (die src der Schnittstelle) aber auch eine Portnummer hat. Ich bin mir nicht sicher, warum der Port benötigt wird und wie ich es bekommen kann. –
Verwenden Sie Port: 0, es ist wahrscheinlich Teil der Spezifikation, da einige Protokolle einen bestimmten Quellport haben möchten, also brauchten sie einen Weg, um sie spezifizieren zu lassen. : 0 ist der ephemere "zufällige" (unbenutzte) Port –