安装步骤
statik用于将静态文件目录嵌入到Go二进制文件中
下载源码statik包
http://github.com/rakyll/statik
go intall 安装statik命令
编译源静态文件
1. 把安装好的包 里面的 statik.go 文件编译好 然后运行
2.编译好的statik.go文件 -src= 你的静态文件路径
3.静态文件编译完成 会生成 statik文件夹和statik.go文件
4.然后再在你的 main.go文件里面使用
5. statik -f -src=public
导入第三方项目


package main
import (
"fmt"
"io/ioutil"
"regexp"
_ "strconv"
_ "strings"
_ "sync"
_ "time"
_ "yxh/scan/finger/statik" //必须先导入生成的statik,再导入fs
"github.com/rakyll/statik/fs"
)
func (N *NmapProbe)Init(){
statikFS, err := fs.New()
if err != nil {
fmt.Println("[-] 静态资源FS初始化失败:%s", err.Error())
}
resources, err := statikFS.Open("/nmap.txt")
if err != nil{
fmt.Println("[-] 加载Nmap协议失败:%s", err.Error())
}
defer resources.Close()
nmapContents, err := ioutil.ReadAll(resources)
if err != nil{
fmt.Println("[-] 加载Nmap协议失败:%s", err.Error())
}
resources1, err := statikFS.Open("/port.txt")
if err != nil{
fmt.Println("[-] 加载端口数据失败:%s\n", err.Error())
}
defer resources1.Close()
// nmapContentsPort, err := ioutil.ReadAll(resources1)
// if err != nil{
// fmt.Println("[-] 加载端口数据失败:%s\n", err.Error())
// }
strdata := string(nmapContents)
fmt.Println(strdata)
}
集成到项目实例


statik使用方法
1.下载http://github.com/rakyll/statik到本地
2.go install 会在GOPATH/bin下生成statik.exe
3.把statik.exe 拷贝到/myscan/cmd目录下
1.cd /myscan/cmd/file
修改nmap.txt
修改port.txt
2.cd /myscan/cmd
statik.exe -f -src=file
statik -f -src=file
3.生成main.exe
cd /myscan/cmd
go build main.go
4.开启扫描任务
cd /myscan/cmd
./main.exe -i 192.168.30.129 -p 1-65535 -m port -li 0 -n 1000 -ng
statik缓存文件内容


package main
import(
_ "buildtest/statik"
"github.com/rakyll/statik/fs"
"fmt"
"io/ioutil"
_ "time"
"os"
"strings"
)
func main(){
ReadStatikFs()
//ReadFile()
}
func ReadStatikFs() {
//修改文件内容不会生效,程序依然读取的是旧的文件内容
//必须重新编译执行go build main.go
statikFS, err := fs.New()
resources, err := statikFS.Open("/1.txt")
if err != nil{
fmt.Println("[-] 加载txt失败:%s", err.Error())
}
defer resources.Close()
txtContents, err := ioutil.ReadAll(resources)
if err != nil{
fmt.Println("[-] 加载txt失败:%s", err.Error())
}
fmt.Println(string(txtContents))
}
func ReadFile() {
//修改文件内容直接生效,程序直接读取磁盘最新文件内容
apath, _:=os.Getwd()
var fingerfile string
if strings.Index(apath,"\\") > 0{
//windows
fingerfile = apath+"\\file\\1.txt"
} else {
//linux os
fingerfile = apath+"/file/1.txt"
}
fmt.Println(fingerfile)
filecon, _ := os.Open(fingerfile)
nmapContents, _ := ioutil.ReadAll(filecon)
fmt.Println(string(nmapContents))
defer filecon.Close()
}