Я использую простой стандартный Go TCP-сервер и хочу связать его с моим интерфейсом tun0.
Сервер:
func main() {
conn, err := net.Listen("tcp", "10.1.0.21:4444")
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
fmt.Println("Running on 10.1.0.21:4444")
c, err := conn.Accept()
if err != nil {
fmt.Println(err)
return
}
for {
data, err := bufio.NewReader(c).ReadString('\n')
if err != nil {
fmt.Println(err)
return
}
fmt.Print("Got ", data)
myTime := "Hello"
c.Write([]byte(myTime))
}
}
As root , чтобы создать tun0, я запускаю:
ip tuntap add mode tun dev tun0
ip addr add 10.1.0.20/24 dev tun0
ip link set dev tun0 up
При прослушивании 10.1.0.21
сервер не может работать:
listen tcp 10.1.0.21:4444: bind: не может назначить запрошенный адрес
Может прослушивать 10.1.0.20
, но Wireshark (как root) не перехватывает ни один пакет на tun0, пока я использую netcat
(nc
) для отправки пакетов на него, и сервер успешно отвечает.
Почему он не может привязаться к 10.1.0.21
? Почему Wireshark не может перехватить трафик c, когда он прослушивает 10.1.0.20
?