Files
tcp-port-scanner/main.go
2020-02-02 01:01:39 -05:00

58 lines
879 B
Go

package main
import (
"flag"
"fmt"
"net"
"sort"
)
var hostname string
func init() {
flag.StringVar(&hostname, "host", "", "the host to be scanned (i.e. localhost)")
}
func worker(ports, results chan int) {
for p := range ports {
address := fmt.Sprintf("%s:%d", hostname, p)
conn, err := net.Dial("tcp", address)
if err != nil {
results <- 0
continue
}
conn.Close()
results <- p
}
}
func main() {
ports := make(chan int, 1000)
results := make(chan int)
var openports []int
for i := 0; i < cap(ports); i++ {
go worker(ports, results)
}
go func() {
for i := 1; i <= 65535; i++ {
ports <- i
}
}()
for i := 0; i < 65535; i++ {
port := <-results
if port != 0 {
openports = append(openports, port)
}
}
close(ports)
close(results)
sort.Ints(openports)
for _, port := range openports {
fmt.Printf("%d open\n", port)
}
}