Skip to content

Instantly share code, notes, and snippets.

@pramos
Created January 14, 2023 13:55
Show Gist options
  • Save pramos/fb38817ef52efd8484cba684f089c53b to your computer and use it in GitHub Desktop.
Save pramos/fb38817ef52efd8484cba684f089c53b to your computer and use it in GitHub Desktop.
Go Scripts to Scan TCP Ports
package main
import (
"flag"
"fmt"
"log"
"net"
"time"
)
var target = flag.String("target", "", "target to scan ports")
func main() {
log.Println("start")
defer log.Println("end")
var open_ports []int
flag.Parse()
if *target == "" {
log.Fatalln("no --target parameter providing for scanning")
}
for port := 1; port <= 1024; port++ {
address := fmt.Sprintf("%s:%d", *target, port)
conn, err := net.DialTimeout("tcp", address, 2*time.Second)
if err != nil {
if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
log.Println("Connection timed out")
} else {
log.Println("Connection refused", neterr)
}
} else {
conn.Close()
log.Printf("Port %d is open on %s\n", port, address)
open_ports = append(open_ports, port)
}
}
for _, port := range open_ports {
fmt.Printf("Address %s has Port:%d opened\n", *target, port)
}
}
package main
import (
"flag"
"fmt"
"log"
"net"
"sort"
"time"
)
var target = flag.String("target", "", "target to scan ports")
func scanner(target string, ports, results chan int) {
for port := range ports {
address := fmt.Sprintf("%s:%d", target, port)
conn, err := net.DialTimeout("tcp", address, 2*time.Second)
if err != nil {
neterr, ok := err.(net.Error)
if ok && neterr.Timeout() {
log.Println("Connection timed out")
} else {
log.Println("Connection refused", neterr)
}
results <- 0
} else {
conn.Close()
results <- port
}
}
}
func main() {
log.Println("start")
defer log.Println("end")
flag.Parse()
if *target == "" {
log.Fatalf("no --target parameter provided for scanning - aborting")
}
ports := make(chan int, 100)
results := make(chan int)
var open_ports []int
for port := 1; port <= cap(ports); port++ {
go scanner(*target, ports, results)
}
go func() {
for port := 1; port <= 1024; port++ {
ports <- port
}
}()
for port := 1; port <= 1024; port++ {
port_status := <-results
if port_status != 0 {
open_ports = append(open_ports, port_status)
}
}
close(ports)
close(results)
sort.Ints(open_ports)
for _, port := range open_ports {
fmt.Printf("Address %s has Port:%d opened\n", *target, port)
}
}
package main
import (
"flag"
"fmt"
"log"
"net"
"time"
)
var target = flag.String("target", "", "target to scan")
var port = flag.Int("port", 80, "port to scan on remote host")
func main() {
log.Println("start")
defer log.Println("end")
flag.Parse()
if *target == "" {
log.Fatalf("no --target parameter provided")
}
log.Printf("Connecting to %s:%d", *target, *port)
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", *target, *port), 2*time.Second)
if err != nil {
if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
log.Println("Connection timed out")
} else {
log.Println("Connection refused", neterr)
}
} else {
log.Println("Connection successful to", conn.RemoteAddr().String())
conn.Close()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment