首页
社区
课程
招聘
[原创]Go实现一个简单的HTTP服务端
发表于: 2020-12-7 17:45 2569

[原创]Go实现一个简单的HTTP服务端

2020-12-7 17:45
2569

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package main
 
import (
    "flag"
    "fmt"
    "log"
    "net/http"
    "os"
    "strconv"
    "strings"
)
 
func exist(filename string) bool {
    _, err := os.Stat(filename)
    return err == nil || !os.IsNotExist(err)
}
func serveFiles(h http.Handler, listDir bool, basedir string) http.HandlerFunc {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        const indexpage = "index.html"
        log.Println(r.URL.Path)
        if strings.HasSuffix(r.URL.Path, "/") {
            indexpath := basedir + indexpage
 
            if exist(indexpath) {
                http.ServeFile(w, r, indexpath)
                return
            }
            if !listDir {
                http.NotFound(w, r)
                return
            }
 
        }
        h.ServeHTTP(w, r)
    })
}
 
func main() {
    port := 80
    listDir := false
    httpdir := "./http_dir/"
 
    flag.IntVar(&port, "p", 80, "listen port")
    flag.BoolVar(&listDir, "l", false, "list directory")
    flag.StringVar(&httpdir, "d", "./http_dir/", "http directory")
    flag.Parse()
    if port < 1 || port > 65535 {
        fmt.Println("invalid port (1-65535)")
        return
    }
    if !exist(httpdir) {
        fmt.Println("invalid path")
        return
    }
    log.Println("httpserver listen on " + strconv.Itoa(port))
    http.Handle("/", serveFiles(http.FileServer(http.Dir(httpdir)), listDir, httpdir))
    log.Println(http.ListenAndServe(":"+strconv.Itoa(port), nil))
}

实现效果

列出目录,可以加上"-l"参数,"-p"可以设置端口,默认http根目录为"http_dir"
图片描述

 

图片描述

 

图片描述

使用场景

1.快速搭建跨平台的http服务器,一键运行部署。
2.支持各种反弹下载程序命令(wget、certutil、bitsadmin),在渗透使用
非常方便。

 

PS:
该代码曾经使用在某个影响千万级用户的漏洞利用中作为服务端使用,使用正常。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-12-18 18:27 被wmsuper编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1076
活跃值: (4162)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
2
Go语言一统江湖
2020-12-7 22:07
0
游客
登录 | 注册 方可回帖
返回
//