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

masscan 端口扫描——(Golang 简单使用总结)

1. 前言

在这里插入图片描述
最近要做一个扫描 ip 端口的功能

扫描的工具有很多,但是如何做到短时间扫描大量的 ip 是个相对困难的事情。

市场上比较出名的工具有 masscannmap

masscan 支持异步扫描,对多线程的利用很好,同时仅仅支持 syn 半开扫描,这让 masscan 对端口进行粗糙扫描的性能达到了非常高的地步

半开扫描是指发送一个 SYN 包(SYN-SENT 状态),等待目标主机回复 SYN+ACK 包(SYN-RECEIVED 状态),然后发送一个 RST 包(ESTABLISHED 状态),以终止连接。半开扫描的优点是速度快,因为它只需要发送一个 SYN 包和一个 RST 包,而不需要完成整个三次握手过程。缺点是容易被一些防火墙和 IDS/IPS 检测到,因为它不是一个完整的连接过程

缺点就是结果比较模糊,无法知道是否是被防火墙 ban 掉的端口

那么用 mmsacn 作为第一层的预处理是很好用的

2. masscan 的安装

准备 (这里不提倡使用yum,yum的版本比较低 )

  1. git 工具
  2. c 编译环境
  1. 克隆、编译
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
  1. 安装
make install
  1. 测试是否安装
masscan --version

在这里插入图片描述

3. masscan 的简单使用

masscan 的主要关乎性能的参数有两个

选项意义
/ --rate发送包的速率,和扫描端口速度正相关
/ --wait发送完包等待时间,和性能负相关,不过时间越久可以扫到的端口就可以越多

实际上,masscan 扫描速度非常快, masscan rate 1000 扫描一个 C 段(256 个 IP 地址)的主机,需要约 3-5 秒钟的时间,一般来说不用担心 masscan 性能不足的问题

  1. 扫描端口范围
masscan -p 1-65535 115.42.32.45
  1. 扫描多个不连续端口
masscan -p 32,43,5453,45 115.42.32.45
  1. 扫描网段
masscan -p 1-65535 10.0.0.0/16

4. Golang 使用

golang 可以通过 cmd 直接和 masscan 进行交互,这里我们直接捕获输出值

startPort := 1
endPort := 65535
portRange := fmt.Sprintf("%d-%d", startPort, endPort)// 构建 masscan 命令cmd := exec.Command("sudo", "masscan", ip, "-p", portRange, "--rate", "50k")// 获取命令输出var out bytes.Buffercmd.Stdout = &outerr := cmd.Run()var stderr bytes.Buffercmd.Stderr = &stderrif err != nil {fmt.Printf("Error running masscan: %v\n", err)return nil, err}fmt.Printf(out)

通过golang 结合命令行可以很方便的对 masscan 结果进行处理

我们也可以把它解析为数组

func parseMasscanOutput(output string) []int {var openPorts []intre := regexp.MustCompile(`port (\d+)/tcp`)matches := re.FindAllStringSubmatch(output, -1)for _, match := range matches {if len(match) > 1 {portStr := match[1]portInt, err := strconv.Atoi(portStr)if err != nil {fmt.Printf("Error running masscan: %v\n", err)continue}openPorts = append(openPorts, portInt)}}return openPorts
}

5. 总结

masscan 是非常高性能的端口扫描工具(高到不需要考虑优化),我们可以使用masscan 进行一次扫描后,再后续使用其他工具进行处理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • playbooks 分布式部署 LNMP
  • 创新食堂管理:采购系统源码与供应链APP开发详解
  • 前后端demo-WarehouseManagement
  • 模板方法模式:Perl中定义算法骨架的艺术
  • 【致远互联FE协作办公平台 codeMoreWidget SQL注入】复现
  • 算法训练1
  • 2024-08-01 QML开发小技巧二
  • 华为OD应聘最全流程!!!
  • python初涉
  • memos content too long
  • 玩机进阶教程-----手机恢复出厂 误删除照片视频 误刷机后 几种数据恢复操作步骤解析【一】
  • 【通俗理解】马尔科夫毯:信息屏障与状态独立性的守护者
  • 基于地理面矢量的虚拟围栏
  • 深入 go interface 底层原理
  • 多模态模型BLIP2学习笔记
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Django 博客开发教程 8 - 博客文章详情页
  • git 常用命令
  • golang 发送GET和POST示例
  • js递归,无限分级树形折叠菜单
  • mysql 数据库四种事务隔离级别
  • Node + FFmpeg 实现Canvas动画导出视频
  • Objective-C 中关联引用的概念
  • OSS Web直传 (文件图片)
  • python 装饰器(一)
  • 爱情 北京女病人
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何进阶一名有竞争力的程序员?
  • 数据仓库的几种建模方法
  • -- 数据结构 顺序表 --Java
  • 小而合理的前端理论:rscss和rsjs
  • 源码安装memcached和php memcache扩展
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)(4.6) Triducer
  • (6)STL算法之转换
  • (NSDate) 时间 (time )比较
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (未解决)macOS matplotlib 中文是方框
  • (转)大型网站的系统架构
  • (转)人的集合论——移山之道
  • (转)详解PHP处理密码的几种方式
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .gitignore不生效的解决方案
  • .net 连接达梦数据库开发环境部署
  • .NET 使用配置文件
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /dev/sda2 is mounted; will not make a filesystem here!
  • :如何用SQL脚本保存存储过程返回的结果集
  • ?php echo ?,?php echo Hello world!;?
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)