Grabbing a banner from a service
After identifying the ports that are open, you can try to read from the connection and see whether the service provides a banner or an initial message.
The following example works like the previous, but instead of just connecting and disconnecting, it will connect and try to read an initial message from the server. If the server provides any data, it is printed, but if the server does not send any data, nothing is printed:
package main import ( "strconv" "log" "net" "time" ) var ipToScan = "127.0.0.1" func main() { activeThreads := 0 doneChannel := make(chan bool) for port := 0; port <= 1024 ; port++ { go grabBanner(ipToScan, port, doneChannel) activeThreads++ } // Wait for all threads to finish for activeThreads > 0 { <- doneChannel activeThreads-- } } func grabBanner(ip string, port int, doneChannel chan bool) { connection, err := net.DialTimeout( "tcp", ip + ":"+strconv...