Ho due interfacce di rete sul mio computer (eth0 ed eth1) e sto provando a comporre una connessione usando uno specifico (eth1). Data la dichiarazione che Go è un linguaggio di sistema, l'ho assunto ma è davvero possibile con la libreria standard corrente?Componi con un indirizzo/interfaccia specifico? Golang
Finora ho avuto modo di ottenere l'interfaccia in base al nome InterfaceByName
(eth1
) poi ho gamma rispetto al metodo Addrs
ed estratto il primo indirizzo [0], che sembra essere l'indirizzo di origine dell'interfaccia eth1 (ad es xxx.xxx .xxx/24); l'altro è l'indirizzo ipv6.
Ho creato un nuovo Dialer
e impostato Dialer.LocalAddr
con l'indirizzo estratto. Tuttavia ottengo questo errore mismatched local address type
Quale sembra essere correlata alla funzione dialSingle da dial.go
Modifica Alcuni codice:
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)
}
}
uscita: 2014/12/10 17:11:48 dial tcp 216.58.208.32:80: mismatched local address type ip+net
Ho problemi a riprodurre questo - è possibile mostrare un esempio di come si sta ottenendo l'indirizzo e la creazione del dialer ? – JimB
@JIMB grazie per averlo esaminato. Ho pubblicato del codice. Sembra che ottenga l'errore indipendentemente dall'indirizzo/interfaccia che sto usando, quindi posso solo supporre che l'indirizzo che ho fornito nel '' Dialer.LocalAddr'' non sia il modulo che si aspetta attraverso la compilazione. Ho studiato e sembra che il tipo predefinito assegnato da Go abbia lo stesso indirizzo IP (lo src dell'interfaccia) ma anche un numero di porta. Non sono sicuro del motivo per cui la porta è richiesta e come posso ottenerla/assegnarla. –
usa la porta: 0, probabilmente è parte della specifica in quanto alcuni protocolli potrebbero volere una specifica porta sorgente, quindi avevano bisogno di un modo per permetterti di specificare. : 0 è l'effimera porta "casuale" (non utilizzata) –