收到conn, err := listener.Accept()
的连接后,我想在conn
的另一端找到客户端的地址。我已尝试使用conn.LocalAddr()
和conn.RemoteAddr()
(Documentation)执行此操作。 .LocalAddr()
只提供服务器进程的地址。 .RemoteAddr()
为客户端提供了正确的IP,但是与我知道要绑定到的客户端的端口号截然不同。
如果它有任何区别,我会在同一台机器上运行两个独立的进程。一个是客户端,一个是服务器。关于我怎样才能找到正确的IP的任何想法:客户端的端口?我要使用LocalAddr
还是RemoteAddr
?
答案 0 :(得分:5)
在OSX上,使用go 1.4时,conn.RemoteAddr()
报告的主机/端口组合与netstat输出进行比较时是正确的。
package main
import (
"fmt"
"net"
"time"
)
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
for {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
fmt.Println(conn.RemoteAddr())
time.Sleep(time.Minute)
conn.Close()
}
}
$ go run foo.go
127.0.0.1:63418
$ netstat -an | grep 8080
tcp4 0 0 127.0.0.1.8080 127.0.0.1.63418 ESTABLISHED
tcp4 0 0 127.0.0.1.63418 127.0.0.1.8080 ESTABLISHED
答案 1 :(得分:-4)
netstat -a 1 -f在windows shell中。我是一个命令行的人,这是有效的,通过重定向将其写入文件。这将每秒重新运行,f是解析DNS名称。