当前位置: 首页 > news >正文

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

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

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

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

package mainimport ("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.WaitGroupopenPorts := []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>是你想要扫描的端口范围。

http://www.lryc.cn/news/394015.html

相关文章:

  • SpringSecurity初始化过程
  • Python爬取股票信息-并进行数据可视化分析,绘股票成交量柱状图
  • 秋招突击——7/4——复习{}——新作{最长公共子序列、编辑距离、买股票最佳时机、跳跃游戏}
  • udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明
  • 电子电气架构 --- 智能座舱万物互联
  • 笔记本电脑内存不够
  • Vue项目使用mockjs模拟后端接口
  • Linux下使用arping检测IP地址是否冲突
  • 为什么 npm run serve 正常,npm run build 就报错:digital envelope routines::unsupported
  • 模电基础 - 简介
  • uniapp中实现瀑布流 短视频页面展示
  • python-开关灯(赛氪OJ)
  • 基于改进高斯-拉普拉斯滤波器的一维时间序列平滑与降噪(MATLAB)
  • 计算组的妙用!!页面权限控制
  • Self-Instruct构造Prompt的例子
  • 友好前端vue脚手架
  • SQL Server特性
  • 华为HCIP Datacom H12-821 卷25
  • 如何在 Selenium Python 中解决验证码 | 2024 完整指南
  • ASCII码对照表【2024年汇总】
  • 刷题之买股票的最佳时机(leetcode)
  • Apache Seata透过源码解决SeataAT模式整合Mybatis-Plus失去MP特性的问题
  • 1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列
  • 【QT】按钮类控件
  • RedHat运维-Linux软件包管理基础-RHEL9软件包管理基础
  • uniapp----- 判断小程序版本有没有更新
  • Spring Boot的无缝衔接:深入解析与实践
  • 在Linux上查找文件的2个好用的命令
  • 实现WebSocket聊天室功能
  • qt opencv 应用举例