这可能是一个非常无聊的研究,如何将masscan编译进Golang程序。现在大量的扫描器趋向于Golang作为编程语言而不是Python,因为Golang有更好的并发能力,及更好的跨平台能力等等等。那么masscan作为宇宙无敌屌的端口扫描器,我们希望Golang有能力可以对masscan进行调用,相比再去造一个轮子所花费的精力会少太多。- Golang使用"os/exec"这个包进行外部调用masscan。
- 将masscan编译进Golang,进行内部调用,就像调用函数一样。
第一种方式,在Github上面已经有很多现成的包。而第二种方式搜索引擎上逛了一圈,似乎没有一丝痕迹。0x01 实操
我们知道masscan使用C编写,而Golang正好可以使用Cgo的特性来调用C代码。
那么问题又来了,单个C语言程序非常好编译,按照官方文档https://pkg.go.dev/cmd/cgo,依葫芦画瓢即可。而像是masscan这样有非常多的C文件,如何处理呢?
经过研究发现有两个关键字CFLAGS和LDFLAGS,CFLAGS指定头文件夹,帮助编译器找到头文件;LDFLAGS可以指定pre-compiled static libraries,提供想要给编译器链接的object files,那么Cgo可以这样写:
接下来我们只需要将masscan的main.c粘到import "C"上面即可。然后将main函数改名,防止和go中的main函数重名冲突(图中改成了scan)。最后的程序是这样的:
编译运行:
现成的代码:https://github.com/hashsecteam/masscan
送给想继续深入研究的人:)
如果你有更好的方案欢迎交流~