Cyber Security / Ethical Hacking
  • Prologue
  • CTF/OSCP Prep
    • Fundamentals
      • Linux
        • Basics
        • Bash Scripting
      • Windows
        • Basics
        • PowerShell
          • Scripting
        • CMD
      • Kali Survivor Skills
    • Information Gathering
      • Passive Recon
      • Active Recon
    • Enumeration
      • Common Ports
      • Vulnerability Analysis
    • Exploitation
      • Shells
  • Binary Exploitation / Exploit Development
    • Useful tools and techniques for Binary Exploitation
    • Shellcoders Handbook
      • Chapter 2 - Stack Overflows
        • Linux Buffer Overflow With Command Injection
        • Linux Buffer Overflow Without Shellcode
      • Chapter 3 - Shellcode
  • TryHackMe
    • Linux Fundamentals
      • Linux Challenges
      • RP: tmux
      • Common Linux Privesc
    • Advent of Cyber
      • Inventory Management
      • Arctic Forum
      • Evil Elf
      • Training
      • Ho-Ho-Hosint
      • Data Elf-iltration
      • Skilling Up
      • SUID Shenanigans
      • Requests
      • Metasploit-a-ho-ho-ho
      • Elf Applications
      • Elfcryption
      • Accumulate
      • Unknown Storage
    • Web Application Security
      • Web Fundamentals
      • Juice Shop
      • WebAppSec 101
    • Linux Privesc Playground
    • Intro to x86-64
    • Ninja Skills
    • CC: Radare2
    • Reversing ELF
    • Intro to Python
    • ToolsRus
  • Programming
    • Python
      • Simple TCP Port Scanner/ Banner Grabber
      • Botnet
      • Keylogger
      • Nmap Scanner
    • Golang
      • Execute Commands
      • MAC changer
      • TCP Port Scanner
      • TCP Port Scanner (improved with goroutines)
      • GoNmap Scanner
  • Protostar
    • Stack 0
    • Stack 1
    • Stack 2
  • Web App Pentesting
    • Recon
    • Authentication (Portswigger Academy)
      • Vulnerabilities in password-based login
        • Username Enumeration via different responses
        • Username enumeration via subtly different responses
        • Username enumeration via response timing
        • Broken brute-force protection, IP block
        • Username enumeration via account lock
        • Broken brute-force protection, multiple credentials per request
      • Vulnerabilities in multi-factor authentication
        • 2FA simple bypass
        • 2FA Broken Logic
        • 2FA bypass using a brute-force attack
      • Vulnerabilities in other authentication mechanisms
    • Broken Acess Controls
      • Insecure direct object references (IDOR)
        • Insecure direct object references lab
  • HackTheBox
    • Active
      • Untitled
      • Blunder
Powered by GitBook
On this page

Was this helpful?

  1. Programming
  2. Golang

TCP Port Scanner (improved with goroutines)

Scanns concurrently all 65536 ports on a target (really fast)

package main

// usage: ./tcp_scanner -h <ipaddress>

import (
	"flag"
	"fmt"
	"net"
	"strconv"
	"sync"
)

// port scanning using goroutines
func portScan(ip string, port string, wg *sync.WaitGroup) {
	defer wg.Done()
	// choose between tcp or udp
	network := "tcp"
	address := ip + ":" + port
	connection, err := net.Dial(network, address)
	// handle errors
	if err != nil {
		return
	}

	fmt.Printf("Port %s is open\n", port)
	connection.Close()
}

func main() {

	// get argument for ip address
	ip := flag.String("h", "", "select IP address to scan")
	// parse argument
	flag.Parse()
	// set slice to store all 65536 port numbers
	var prt []int
	// set slice to sort all 65536 port numbers converted to string
	prtStr := []string{}
	// make integer slice with 65536 slices
	allP := make([]int, 65536)
	// iterate throught all the 65536 slices append them to prt
	for p := range allP {
		prt = append(prt, p)
	}
	// convert the int slice into string slice
	for i := range prt {
		n := prt[i]
		text := strconv.Itoa(n)
		prtStr = append(prtStr, text)
	}

	var wg sync.WaitGroup

	for _, p := range prtStr {
		// if the counter becomes zero, all goroutines blocked on Wait are released
		wg.Add(1)
		// call portScan function and iterate through every port on ip address concurrently
		go portScan(*ip, p, &wg)
	}

	wg.Wait()
}
PreviousTCP Port ScannerNextGoNmap Scanner

Last updated 5 years ago

Was this helpful?