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. 克隆、编译
go 复制代码
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
  1. 安装
go 复制代码
make install
  1. 测试是否安装
go 复制代码
masscan --version

3. masscan 的简单使用

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

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

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

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

4. Golang 使用

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

go 复制代码
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.Buffer
	cmd.Stdout = &out
	err := cmd.Run()
	var stderr bytes.Buffer
	cmd.Stderr = &stderr
	if err != nil {
		fmt.Printf("Error running masscan: %v\n", err)
		return nil, err
	}
			fmt.Printf(out)

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

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

go 复制代码
func parseMasscanOutput(output string) []int {

	var openPorts []int
	re := 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 进行一次扫描后,再后续使用其他工具进行处理

相关推荐
长河35 分钟前
Java开发者LLM实战——LangChain4j最新版教学知识库实战
java·开发语言
Cyan_RA91 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
在未来等你4 小时前
Elasticsearch面试精讲 Day 17:查询性能调优实践
大数据·分布式·elasticsearch·搜索引擎·面试
再见晴天*_*4 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
lqjun08275 小时前
Qt程序单独运行报错问题
开发语言·qt
hdsoft_huge7 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘7 小时前
39.网络流入门
开发语言·网络·c++·算法
未来之窗软件服务8 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
小冯记录编程8 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
1uther8 小时前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎