Go语言实现的端口扫描工具示例

Go语言实现的端口扫描工具示例

创建一个端口扫描工具涉及到网络编程和并发处理,下面是一个简单的Go语言实现的端口扫描工具示例。这个工具会扫描指定IP地址的指定范围内的端口。

请注意,使用端口扫描工具可能会违反某些网络的使用条款,甚至可能违反法律。在任何情况下使用此类工具之前,请确保你有适当的权限和合法的理由。

go 复制代码
package main

import (
	"fmt"
	"net"
	"os"
	"strconv"
	"sync"
	"time"
)

// scanPort 用于扫描单个端口
func scanPort(ip string, port int, wg *sync.WaitGroup, openPorts *[]string) {
	defer wg.Done()

	// 构建目标地址
	address := ip + ":" + strconv.Itoa(port)
	conn, err := net.DialTimeout("tcp", address, 3*time.Second)
	if err != nil {
		// 如果连接失败,说明端口可能未开放
		return
	}
	defer conn.Close()

	// 如果连接成功,说明端口开放
	*openPorts = append(*openPorts, strconv.Itoa(port))
}

// portScanner 用于扫描指定IP的指定端口范围
func portScanner(ip string, startPort, endPort int) []string {
	var wg sync.WaitGroup
	openPorts := []string{}

	// 并发扫描端口
	for port := startPort; port <= endPort; port++ {
		wg.Add(1)
		go scanPort(ip, port, &wg, &openPorts)
	}

	// 等待所有端口扫描完成
	wg.Wait()

	return openPorts
}

func main() {
	if len(os.Args) < 3 {
		fmt.Println("Usage: go run main.go <IP> <StartPort> <EndPort>")
		os.Exit(1)
	}

	ip := os.Args[1]
	startPort, err1 := strconv.Atoi(os.Args[2])
	endPort, err2 := strconv.Atoi(os.Args[3])

	if err1 != nil || err2 != nil {
		fmt.Println("Port numbers must be integers.")
		os.Exit(1)
	}

	openPorts := portScanner(ip, startPort, endPort)

	fmt.Printf("Open ports for %s: %v\n", ip, openPorts)
}

要使用这个工具,你需要保存上面的代码到一个.go文件中,比如portScanner.go,然后在命令行中使用go run portScanner.go <IP> <StartPort> <EndPort>来运行它,其中<IP>是你要扫描的IP地址,<StartPort><EndPort>是你想要扫描的端口范围。

相关推荐
求知若饥几秒前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
数据小爬虫@3 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.5 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy11 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader18 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默29 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Code哈哈笑38 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528741 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶42 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_4336184444 分钟前
shell 编程(二)
开发语言·bash·shell