怎样用go语言获取本地IP地址?

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

共 13 个回复


jimmykuu

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])
}
# 0

gogo

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

# 1

gogo

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

# 2

polaris

试试这个

package main

import (
    "net"
    "fmt"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        panic(err)
    }
    for _, addr := range addrs {
        fmt.Println(addr.String())
    }
}
# 3

pqm1989

 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 }


# 4

xingzhiyuan

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

# 5

UlricQin

package main

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

func main() {
    log.Println(net.IntranetIP())
}
# 6

UlricQin

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

# 7

ije

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

# 8

ije

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
}
# 9

wangshuo

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())
            }
        }
    }
}
# 10

youzhengchuan

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)
}
# 11