Skip to content

Instantly share code, notes, and snippets.

@jniltinho
Created March 26, 2014 16:55
Show Gist options
  • Save jniltinho/9787946 to your computer and use it in GitHub Desktop.
Save jniltinho/9787946 to your computer and use it in GitHub Desktop.
Get My IP Golang
package main
/*
URL: https://github.com/mccoyst/myip/blob/master/myip.go
URL: http://changsijay.com/2013/07/28/golang-get-ip-address/
*/
import (
"net"
"os"
)
func main() {
addrs, err := net.InterfaceAddrs()
if err != nil {
os.Stderr.WriteString("Oops: " + err.Error() + "\n")
os.Exit(1)
}
for _, a := range addrs {
if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
os.Stdout.WriteString(ipnet.IP.String() + "\n")
}
}
}
}
@shilangyu
Copy link

Might be easier to do something like this:

package main

import "net"

func main() {
    conn, err := net.Dial("udp", "8.8.8.8:80")
    // handle err...

     defer conn.Close()
     localAddr := conn.LocalAddr().(*net.UDPAddr)
}

This will give you the primary IP address used by your system (great for machines that have multiple ips, interfaces etc).

China cannot access google dns 8.8.8.8

Does not matter, its a UDP connection therefore there is no handshake, works offline

@west0706
Copy link

Thanks! very simple and powerful!

@imbin
Copy link

imbin commented May 26, 2021

Thanks! very simple and powerful!

Copy link

ghost commented Feb 26, 2022

牛批的很

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment