Golang:如何查找IP:TCP连接中传入客户端的端口

时间:2015-01-15 19:35:13

标签: sockets tcp go ip server

收到conn, err := listener.Accept()的连接后,我想在conn的另一端找到客户端的地址。我已尝试使用conn.LocalAddr()conn.RemoteAddr()Documentation)执行此操作。 .LocalAddr()只提供服务器进程的地址。 .RemoteAddr()为客户端提供了正确的IP,但是与我知道要绑定到的客户端的端口号截然不同。 如果它有任何区别,我会在同一台机器上运行两个独立的进程。一个是客户端,一个是服务器。关于我怎样才能找到正确的IP的任何想法:客户端的端口?我要使用LocalAddr还是RemoteAddr

2 个答案:

答案 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名称。