Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get a network client's IP converted to a string in Golang?

I'm trying to get a client IP when a connection is made to a server. Trying to use RemoteAddr() returns an addr-type, and while I can print to the console using fmt.Println, I'm trying to assign the value to a string variable.

Is this possible? Or is there a better way to pull a connected client's IP address?

Sample of the function I'm working on (the strRemoteAddr assignment is the problem part, but I left it in as a placeholder...):

func GrabInput(conn net.Conn, strFromListenerNumber string) {
    var strMessage string
    var strRemoteAddr string

    bufIncoming := make([]byte, 1024)

    strRemoteAddr = conn.RemoteAddr()

    for {
        bytesRead, err := conn.Read(bufIncoming)
        if err != nil {
            LogEvent(strFromListenerNumber, err.Error())
            return
        }

        strMessage = string(bufIncoming[0 : bytesRead-1])
        LogEvent(strFromListenerNumber+": "+strRemoteAddr, strMessage)
    }
}
like image 291
Bart Silverstrim Avatar asked Apr 16 '15 22:04

Bart Silverstrim


2 Answers

Convert it to *net.TCPAddr

if addr, ok := conn.RemoteAddr().(*net.TCPAddr); ok {
    fmt.Println(addr.IP.String())
}
like image 70
mileusna Avatar answered Nov 14 '22 16:11

mileusna


Seems just

strRemoteAddr = conn.RemoteAddr().String()

can do, net.Addr type has method String() for string representation.

like image 26
Uvelichitel Avatar answered Nov 14 '22 16:11

Uvelichitel