技术分享|关于如何免费获取短信验证码
技术分享|关于如何免费获取短信验证码
相信大家在做自动化测试的时候,都会遇到一个问题就是获取短信验证码。
有的公司的短信验证码是存到数据库的,有的公司的短信验证码是存到日志里面的,但是有些短信验证码是开发都拿不到,没办法提供保存方法的。
如何获取到短信验证码,得到了三种方法,可能不全,请大神指出。
卡猫 (要付费)
安卓的短信广播
第三方接码平台 (要付费)
下面就来分享下
如何通过安卓的广播拿到短信验证码
Android在收到短信后会发送一个Action为android.provider.Telephony.SMS_RECEIVED的广播,所以我们只需要写个类继承BroadcastReceiver就可以很容易地监听到短信。
小编是这样做的
首先安装个android studio,然后新建个工程,建好工程之后到工程-->app-->src-->main-->java-->com.example.xxx.myapplication 下新建个文件,文件名是SmsInterceptReceiver ,输入如下代码,如果你拷贝之后发现有些类的名称是红色的,说明你没有导包,mac 是按住alt+enter然后添加包 ,windows的快捷键请自行百度。
package com.example.getsms;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
/**
* Created by xxx on 17/3/28.
*/
public class SmsInterceptReceiver extends BroadcastReceiver {
private final String TAG = "SmsRec";
private static final String SMS_EXTRA_NAME ="pdus";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String message = "";
Log.e(TAG, "free message " );
Bundle extras = intent.getExtras();
if ( extras != null ) {
try {
Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
ContentResolver contentResolver = context.getContentResolver();
Log.e(TAG, "free message " );
for ( int i = 0; i < smsExtra.length; ++i ) {
SmsMessage sms = SmsMessage.((byte[]) smsExtra[i]);
String body = sms.getMessageBody().toString();
message += body;
}
Log.e(TAG, "free message : " + message);
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.getMessage());
}
}
}
}
AndroidManifest.xml(这个文件在java同级目录res下)里注册一下接收器:
下面的代码添加到activity标签同级的下方即可
添加权限(还是上面这个xml文件,搞不清就问下你们安卓开发):
下面这个代码我这里是添加在application标签上面的
手机要连上电脑,打开USB调试。adb devices查看手机有没有连接上,准备工作做好之后,点击android studio 页面上的绿色三角按钮运行即可。运行成功的话手机上会有个你自己建的工程名蓝色标题的页面。
python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用。
#coding=utf-8
import os
def GetCodeFromSms():
os.system("adb logcat -c")
cmd = ' adb logcat -d |grep E/SmsRec'
while(1):
smscode = os.popen(cmd).read()
print smscode
if (smscode!=""):
smscode = smscode.split("验证码:")[1].split(",")[0]
break;
print "验证码是:"+smscode
if __name__ == '__main__':
GetCodeFromSms()
因为小编用的是mac,所以过滤用的grep,如果你是windows,改成findstr。
文件小编是放在终端的文件夹里面,运行python文件,通过接口给被链接手机发验证码或者是用其他手机给被连接手机发送验证码进行测试。就可以在终端看见输出验证码,然后根据自己需求拿出来即可。
E/SmsRec (12345): free message
E/SmsRec (12345): free message
E/SmsRec (12345): free message : 验证码:654321
验证码是:654321
至于为什么会多出来几个free message,是因为写java那段代码的开发用Log.e调试用的。E/ 是错误消息的意思,但是可以显示出来就好。D/ 是debug 消息,I/是一般消息 W/警告消息 V/ 是各种乱七八槽的消息
-
- 《精灵宝可梦》图鉴037:宝可梦世界中的火焰妖狐-六尾
-
2024-11-05 07:59:13
-
- 新中国十大间谍案(五)陆建华-甘愿沦为四国间谍的社科院专家
-
2024-11-05 07:56:58
-
- 唐朝十大名将排行榜都有哪些人上榜
-
2024-11-05 07:54:43
-
- 太平洋最大岛国,巴布亚新几内亚现状,物种丰富、暴力肆虐
-
2024-11-05 07:52:29
-
- 南京旅游攻略,南京必去的10大旅游景点 年轻人等你来
-
2024-11-05 07:50:14
-
- 美育基地 - 打卡济南首家蜡像艺术馆,解密蜡像背后的故事
-
2024-11-05 07:47:59
-
- 《灵魂摆渡》:永生的冥王阿茶真的至高无上?她只是个可怜人
-
2024-11-05 07:45:44
-
- 西安市情概况
-
2024-11-05 07:43:30
-
- 彭州风情-白水河沿线
-
2024-11-05 07:41:15
-
- 中共成都市第十四届委员会常委简历(附照片)
-
2024-11-04 10:49:43
-
- 一代武术宗师霍元甲,一生有几个子女,他们后代的生活现状又如何
-
2024-11-04 10:47:28
-
- 什么是本科提前批次?
-
2024-11-04 10:45:14
-
- 对越自卫反击战
-
2024-11-04 10:42:59
-
- 96年台海危机回顾,中华民族众志成城的隐忍坚韧
-
2024-11-04 10:40:44
-
- 朱子豪书法作品赏析
-
2024-11-04 10:38:29
-
- 乌尔奇奥拉,死神中的魅力反派
-
2024-11-04 10:36:14
-
- 小时候看过的动画片,你看过几个?
-
2024-11-04 10:33:59
-
- 卢比奥:从西班牙金童到篮球场上的魔术师
-
2024-11-04 10:31:45
-
- 柳云龙主演的七部谍战剧,部部堪称经典,但最后一部至今被压箱底
-
2024-11-04 10:29:30
-
- 宝安区人力资源局:坚持“党建+人才”夯实“黄金内湾”支撑
-
2024-11-03 11:43:52