Golang 中国

请教一个问题,怎样用go语言获取本地IP地址?

12 回复
jimmykuu
#1 jimmykuu • 2013-02-06 12:10
package main

import (
    "net"
    "fmt"
    "strings"
)

func main() {
    conn, err := net.Dial("udp", "google.com:80")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    defer conn.Close()
    fmt.Println(strings.Split(conn.LocalAddr().String(), ":")[0])
}
gogo
#2 gogo • 2013-02-06 21:22

非常感谢,这是学习g语言的好地方。

gogo
#3 gogo • 2013-02-06 21:26

我刚试了下, 如果是局域网,我想获取本机IP, 上面的方法好像不行?

polaris
#4 polaris • 2013-02-16 14:03

试试这个

package main

import (
    "net"
    "fmt"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        panic(err)
    }
    for _, addr := range addrs {
        fmt.Println(addr.String())
    }
}
pqm1989
#5 pqm1989 • 2013-03-25 16:32
 1 package main
  2 
  3 import (
  4         "fmt"
  5         "net"
  6         "strings"
  7 )
  8 
  9 func main(){
 10         info,_:=net.InterfaceAddrs()
 11         for _,addr := range info{
 12                 fmt.Println(strings.Split(addr.String(),"/")[0])
 13         }
 14 }


xingzhiyuan
#6 xingzhiyuan • 2015-11-13 11:06

大哥们你们回答之前 自己敲下代码试试好吗?

UlricQin
#7 UlricQin • 2015-11-17 14:32
package main

import (
    "github.com/toolkits/net"
    "log"
)

func main() {
    log.Println(net.IntranetIP())
}
UlricQin
#8 UlricQin • 2015-11-17 14:35

未登录用户登录之后没有跳转回来,差评,哈哈

ije
#9 ije • 2015-11-17 16:50

golang只能获取本机ip地址吧 如果你要获取外网的ip的话可以借助第三方或者你对外的路由器有相关api可用

ije
#10 ije • 2015-11-17 16:53
package main

import (
    "log"
    "bytes"
    "net/http"
    "io/ioutil"
)

func main() {
    log.Println(getExternalIPAddr())
}

func getExternalIPAddr() (exip string, err error) {
    resp, err := http.Get("http://myexternalip.com/raw")
    if err != nil {
        return
    }
    defer resp.Body.Close()
    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return
    }
    exip = string(bytes.TrimSpace(b))
    return
}
wangshuo
#11 wangshuo • 2015-11-19 11:05
package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    for _, addr := range addrs {
        if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                fmt.Println(ipnet.IP.String())
            }
        }
    }
}
youzhengchuan
#12 youzhengchuan • 2018-07-05 15:34
package main

import (
    "fmt"
    tnet "github.com/toolkits/net"
    "net"
    "regexp"
    "strings"
)

func getipaddr() {
    fmt.Println("program init...")
    ifaces, _ := net.Interfaces()
    for _, i := range ifaces {

        addrs, _ := i.Addrs()
        for _, addr := range addrs {
            match, _ := regexp.MatchString(`^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+$`, addr.String())
            if !match {
                continue
            }
            slit := strings.Split(addr.String(), "/")
            fmt.Println(i.Name, i.Flags, slit)
        }
    }
}

func main() {
    fmt.Println("Hello, 世界")
    getipaddr()
    ips, err := tnet.IntranetIP()
    fmt.Println("IntranetIP:", ips, err)
}
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。