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 进行一次扫描后,再后续使用其他工具进行处理

相关推荐
Hello-Mr.Wang几秒前
vue3中开发引导页的方法
开发语言·前端·javascript
救救孩子把3 分钟前
Java基础之IO流
java·开发语言
WG_174 分钟前
C++多态
开发语言·c++·面试
宇卿.11 分钟前
Java键盘输入语句
java·开发语言
Amo Xiang21 分钟前
2024 Python3.10 系统入门+进阶(十五):文件及目录操作
开发语言·python
friklogff34 分钟前
【C#生态园】提升C#开发效率:深入了解自然语言处理库与工具
开发语言·c#·区块链
GoppViper42 分钟前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql