Zifferblatt mit einer bestimmten Adresse / - interface ? Golang
Habe ich zwei Netzwerk-interfaces auf meinem Rechner ( eth0 und eth1) und ich versuche, die Verbindung mit einem bestimmten (eth1). Angesichts der Aussage, dass die Go ist ein system Sprache bin ich davon ausgegangen, so aber ist es wirklich möglich mit dem aktuellen standard-Bibliothek?
Bisher habe ich, um die Schnittstelle von Namen InterfaceByName
(eth1
) dann habe ich über die Addrs
Methode und extrahiert die erste Adresse [0] das scheint zu sein, die source-Adresse von eth1-Schnittstelle (z.B. xxx.xxx.xxx/24); die andere ist die ipv6-Adresse.
Ich habe eine neue Dialer
und setzen Dialer.LocalAddr
mit der Adresse extrahiert. Allerdings bekomme ich diesen Fehler mismatched local address type
wich, scheint im Zusammenhang mit dialSingle Funktion von dial.gehen
Bearbeiten
Einige code:
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)
}
}
Ausgabe:
2014/12/10 17:11:48 dial tcp 216.58.208.32:80: mismatched local address type ip+net
- Ich habe Probleme bei der Wiedergabe dieser-können Sie ein Beispiel zeigen, wie Sie die Adresse und Erstellung der dialer?
- Dank für das schauen hinein. Ich habe einige code. Es scheint, bekomme ich die Fehlermeldung, unabhängig der Adresse/ - interface, das ich verwende, so kann ich nur vermuten-Adresse, die ich in der
Dialer.LocalAddr
ist nicht von der form erwartet durch Sie kompiliert wird. Ich habe nachgeforscht und es scheint, dass der Standard-Typ zugeordnet von Go hat die gleiche IP-Adresse (die src von der Schnittstelle), aber auch eine port-Nummer. Ich bin mir nicht sicher, warum der port ist erforderlich und wie kann ich mich/ zuweisen. - port :0, es ist wohl Teil der Spezifikation, wie manche Protokolle können eine bestimmte Quell-port, so brauchte Sie einige Weg zu lassen, die Sie angeben. :0 die ephemeren "zufällig" (nicht verwendeten) port
- danke! Noch Addr[golang.org/pkg/net/#Addr] zu sein scheint, eine Schnittstelle. Soll ich rufen Sie die String () - Methode, ersetzen Sie das Subnetz (/24) mit einer port-Nummer und konvertieren/implment es als interface?
- Hier ist ein Beispiel auf spielen. Es stellt sich heraus, die Sie brauchte *net.IPNet und dann Kerl IP. play.golang.org/p/E3iXXpq0mD (dieser schnappt sich die Adresse von meinem mac wifi-Karte, ändern en0 auf eth1)
- das Haupt-Problem ist noch nicht behoben, play.golang.org/p/iJTaM-bfdk
- Ich denke, dass ich wirklich brauchen eine TCPAddr (also die port-Sache) aber ich bin mir nicht sicher, wie ich soll, um das zu bekommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie ziehen Sie die Adresse von Schnittstelle, es ist der Typ
*net.IPnet
verpackt in einemnet.Addr
- Schnittstelle, die enthält und die Adresse und die netmask nicht eine Adresse und port. Sie können die IP-Adresse jedoch zum erstellen einer neuen TCPAddr nach, daraus eine*net.IPnet
ip route show
--bind-address
) und cURL (--interface
), die dies tun, aber ich bin mir nicht sicher, wie genau Sie intern arbeiten. Zunächst war die Frage wie die Einwahl mit einem bestimmten Netzwerk-interface.syscall.BindToDevice
, aber das ist eine privilegierte nennen und oft nicht die richtige Lösung. Das kann was werden mit curl funktioniert, wenn es verfügbar ist. Zuerst herausfinden, warum es andernfalls bei einem Netzwerk-Ebene (ist Ihre Namensauflösung aufgetreten?). Wenn das problem ist einfach, dass die Ziel-entspricht der Standard-gateway für ein anderes interface, müssen Sie zu route hinzufügen, um es zu beheben. Verwandte: serverfault.com/questions/228195/...