当前位置: 首页 > 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>是你想要扫描的端口范围。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 纯前端如何实现Gif暂停、倍速播放
  • 制造企业数字化的重要方法——低代码
  • python集成Bartender实现二维码打印
  • 079、类的继承
  • 【QT】多元素控件
  • Android 如何通过代码实时设置EditTextView光标
  • RNN 交叉熵
  • 【大模型】解锁语言模型潜能:提示工程的艺术
  • SpringBoot源码阅读(3)——监听器
  • Java中实现给PDF文件添加水印的功能
  • VitePress安装部署
  • 「AIGC」大数据开发语言Scala入门
  • 【vue】下载 打印 pdf (问题总结)- 持续更新ing
  • C++ STL 协程(Coroutines)
  • 【Linux】网络新手村
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android Studio:GIT提交项目到远程仓库
  • Facebook AccountKit 接入的坑点
  • Idea+maven+scala构建包并在spark on yarn 运行
  • mysql外键的使用
  • Python语法速览与机器学习开发环境搭建
  • quasar-framework cnodejs社区
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SpriteKit 技巧之添加背景图片
  • vue 个人积累(使用工具,组件)
  • 产品三维模型在线预览
  • 排序算法学习笔记
  • 前端路由实现-history
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 我们雇佣了一只大猴子...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​Python 3 新特性:类型注解
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (02)Hive SQL编译成MapReduce任务的过程
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (独孤九剑)--文件系统
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (三)c52学习之旅-点亮LED灯
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .htaccess 强制https 单独排除某个目录
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /etc/fstab 只读无法修改的解决办法
  • @Service注解让spring找到你的Service bean
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [C#]猫叫人醒老鼠跑 C#的委托及事件