Linux Go中的服务器未侦听tun0
我正在运行一个简单、标准的Go TCP服务器,我想将它绑定到我的tun0接口 服务器是:Linux Go中的服务器未侦听tun0,linux,go,tun,Linux,Go,Tun,我正在运行一个简单、标准的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")
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))
}
}
作为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
时,服务器无法运行:
侦听tcp 10.1.0.21:4444:bind:无法分配请求的地址
它可以监听10.1.0.20
,但Wireshark(作为root)不会截获tun0上的任何数据包,而我正在使用netcat
(nc
)向其发送数据包,服务器会成功响应
为什么它不能绑定到
10.1.0.21
?为什么Wireshark在侦听10.1.0.20
时无法拦截任何流量?确保选择环回接口以捕获该流量,因为流量是本地的。另见:
您关于绑定到
10.1.0.21
的另一个问题已在上述评论中得到回答。您是否检查了设备文件的权限?@MarkusWMahlberg如何检查?我以root用户身份运行该程序,但我仍将再次检查。我用这个来调试,都是在UbuntuYou分配的.21而不是.20上。您必须运行ip addr add 10.1.0.21/24 dev tun0
以使其可用。@Peter“您分配的是.21而不是.20。您必须运行ip addr addr add 10.1.0.21/24 dev tun0以使其可用。”难道10.1.0.21/24
与10.1.0.20/24
不一样吗。一个在子网中分配.20,另一个在同一子网中分配.21。它不会分配子网中的所有地址(如果这是您所期望的)。它只是addr add 10.1.0.20 netmask 255.255.255.0
(或者类似的东西;我忘记了确切的命令)的缩写。