如何将masscan编译进Golang程序研究
2021-08-01 21:05:17 Author: mp.weixin.qq.com(查看原文) 阅读量:219 收藏

0x00 引言

这可能是一个非常无聊的研究,如何将masscan编译进Golang程序
现在大量的扫描器趋向于Golang作为编程语言而不是Python,因为Golang有更好的并发能力,及更好的跨平台能力等等
那么masscan作为宇宙无敌屌的端口扫描器,我们希望Golang有能力可以对masscan进行调用,相比再去造一个轮子所花费的精力会少太多。
那么在调用masscan的时候,有两个选择:
  1. Golang使用"os/exec"这个包进行外部调用masscan。
    1. 坏处:需要系统中提前预置masscan二进制程序
  2. 将masscan编译进Golang,进行内部调用,就像调用函数一样。
    1. 坏处:编译阶段无法使用Golang的交叉编译特性
第一种方式,在Github上面已经有很多现成的包。而第二种方式搜索引擎上逛了一圈,似乎没有一丝痕迹。
那么我是真的无聊,竟然真的去研究了。

0x01 实操

我们知道masscan使用C编写,而Golang正好可以使用Cgo的特性来调用C代码。

那么问题又来了,单个C语言程序非常好编译,按照官方文档https://pkg.go.dev/cmd/cgo,依葫芦画瓢即可。而像是masscan这样有非常多的C文件,如何处理呢?

经过研究发现有两个关键字CFLAGSLDFLAGSCFLAGS指定头文件夹,帮助编译器找到头文件;LDFLAGS可以指定pre-compiled static libraries,提供想要给编译器链接的object files,那么Cgo可以这样写:

那么整体的流程是这样的:

接下来我们只需要将masscan的main.c粘到import "C"上面即可。然后将main函数改名,防止和go中的main函数重名冲突(图中改成了scan)。最后的程序是这样的:

编译运行:

现成的代码:https://github.com/hashsecteam/masscan

送给想继续深入研究的人:)

如果你有更好的方案欢迎交流~


文章来源: https://mp.weixin.qq.com/s/A_MUSnU2gUK1-U5thr9p8w
如有侵权请联系:admin#unsafe.sh