我是怎么选择一个电信流量卡的号码的

背景

手机流量经常不够用,所以在某多上选择了一款流量卡,9元/30g通/30g定/300分钟,快递过来之后,要根据他们的小纸条激活,然后再通过一个他们的专属链接充值100然后送100,再给你自动开通一个流量套餐,送的100按月返还,能抵一部分套餐,激活的时候是在线选号,这是大部分流量卡的套路。

激活

激活的流程是扫码他们的二维码:


file

而且还提供了搜索的功能,这样选的话其实挺眼花缭乱的,一页一页的选的话,可能看两页就放弃了,选择的号码可能不是最优解,但是如果这个能抓包的话,我可以通过轮询这个接口就可以把他们所有的号全部拿下来,然后通过排序,正则的方式选择出靓号和自己喜欢的号码。
这个过程需要注意两点:
1.抓包-如果这个接口是有https的私签认证,就可能抓包过程就失败。
2.鉴权-如果接口有签名校验,那么改动任何参数就无法成功通过。

抓包

抓包使用Charles工具,这个过程很顺利,出乎我的意料,接口是通用的Https,没有签名校验

file

这样我不仅能拿到电话的数据,还能知道分页和整个数据的条目。
Charles有一个Compose的功能,允许你像PostMan工具一样去修改历史接口中的每个信息,然后重新运行,观察接口的返回情况。利用这个功能,我试探出了pageSize最大支持的个数是99,超过这个数字就会报错,那么3000条数据就可以通过31次的请求就可以都拿到。
我把这个接口的参数信息用Charles的Copy cURL Request 功能导出.

curl 
-H 'Host: www.189.cn' 
-H 'Cookie: SESSION=a376fd82-f40f-4a38-9193-992956a06a50; loginStatus=non-logined; s_fid=78A282DF37C9A607-10DF95D9036C2CAB; trkHmClickCoords=83-115-664; trkId=D9EA4392-7D63-418E-A62A-86FB3045A502; s_sq=eshipeship-189-all%3D%2526pid%253D%25252Fwap%25252FblankCard%25252FsmallWhiteV15_newDetails.html%2526pidt%253D1%2526oid%253Dfunctiononclick%252528event%252529%25257Bhistory.back%252528%252529%25253B%25257D%2526oidt%253D2%2526ot%253DIMG; s_cc=true; lvid=12fb07bdb3a869ffdb9c83c169279339; nvid=1; svid=3035BE8052727411CA9E0DB293C57C4F' 
-H 'Accept: application/json, text/javascript, */*; q=0.01' 
-H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1' 
-H 'Referer: https://www.189.cn/wap/blankCard/publicPages/selectNumber.html?obj=smallWhiteObj' 
-H 'Accept-Language: zh-cn' 
-H 'X-Requested-With: XMLHttpRequest' 
--compressed 'https://www.189.cn/blankcard/product/num/list.do?pid=00000000B459193BEDBA6785E053AE1410AC86D3&pageIndex=1&pageSize=20&minpay=&maxpay=&innumber=&headnumber=&contNumber=&inflag=&islast=&lucky=0'

处理这个文本,我选择用IntelliJ IDEA 家的IDE(Android Studio、webstorm、pychram等任何一款都可以),原因是可以通过一些快捷键(块选择、多光标处理、批量替换等)功能快速处理这些参数,可以快速改造成Python需要的字典格式,比如可以用很短的时间处理成如下格式:

headers

"Host": "www.189.cn",
"Accept": "application/json, text/javascript, */*; q=0.01",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1",
"Referer": "https://www.189.cn/wap/blankCard/publicPages/selectNumber.html?obj=smallWhiteObj",
"Accept-Language": "zh-cn",
"X-Requested-With": "XMLHttpRequest

cookies

"SESSION":"a376fd82-f40f-4a38-9193-992956a06a50", 
"loginStatus":"non-logined", 
"s_fid":"78A282DF37C9A607-10DF95D9036C2CAB", 
"trkHmClickCoords":"83-115-664", 
"trkId":"D9EA4392-7D63-418E-A62A-86FB3045A502", 
"s_sq":"eshipeship-189-all%3D%2526pid%253D%25252Fwap%25252FblankCard%25252FsmallWhiteV15_newDetails.html%2526pidt%253D1%2526oid%253Dfunctiononclick%252528event%252529%25257Bhistory.back%252528%252529%25253B%25257D%2526oidt%253D2%2526ot%253DIMG", 
"s_cc":"true", 
"lvid":"12fb07bdb3a869ffdb9c83c169279339", 
"nvid":"1", 
"svid":"3035BE8052727411CA9E0DB293C57C4F",

params

"pid":"00000000B459193BEDBA6785E053AE1410AC86D3"
"pageIndex":"1"
"pageSize":"20"
"minpay":""
"maxpay":""
"innumber":""
"headnumber":""
"contNumber":""
"inflag":""
"islast":""
"lucky":"0"

剩下的就是用Python 的requests去完成爬虫的功能

爬虫

把上面的信息复制到Python脚本中,写一个模拟接口,看下接口的状态:

    response = requests.get('https://www.189.cn/blankcard/product/num/list.do', headers=headers, params=params, cookies=cookies)
    print(response.content.decode("utf-8"))

不幸的是,接口报用户未登录异常,但是这个接口是不需要登录,然后我用Charesle 的repeat功能试了,结果也是用户未登录

file

然后我重新上一步抓包的过程,最后发现还是报这个问题,我怀疑应该是这个会话是有个过期的时间,如果我手动的去拼接这个参数,可能在完成的时候就已经过期了,那么有没有能把cURL的信息快速转换成Python代码呢?

代码

现阶段我认为我能遇到的问题,别人都遇到过了。
一、node js 插件curlconverter
https://www.npmjs.com/package/curlconverter
二、Python第三方库convertcurl
https://www.cnpython.com/pypi/convertcurl

file

我选了第一种方案:

1、安装curlconverter
npm install --save curlconverter
2、使用JS脚本转换
var curlc = require('curlconverter');
console.log(curlc.toPython('curl -H "User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.0; EVA-AL00 Build/HUAWEIEVA-AL00)" -H "Host: www.google.com" --compressed http://www.google.com/'))

执行js脚本就会帮你快速生成Python脚本:


file

然后把代码复制到Python脚本中,后面拼接自己的逻辑代码:

……

headers、params、cookies的信息
……
# 生成的是元组,需要转换成字典后面动态改参数的大小
params = dict(params)
# 存放手机号
phoneNum = []

for index in range(1, 30):
    print("循环次数:%d" % index)
    params["pageSize"] = '99'
    params["pageIndex"] = index
    response = requests.get('https://www.189.cn/blankcard/product/num/list.do', headers=headers, params=params,
                            cookies=cookies)
    loads = json.loads(response.content.decode("utf-8"))
    items = loads.get('dataObject').get("items")
    try:
        if items:
            for item in items:
                phone = item.get('phoneNumber')
                phoneNum.append(phone)
    except OSError:
        print(phoneNum)
print(phoneNum)
# 保存成csv,可视化处理
numpy.savetxt("phone.csv", phoneNum, fmt="%s", header="phoneNumber")

筛选

拿到数据准备进行处理:
一、CSV可视化排序
可以按照符合的趋势,选择出自己想要的数据,缺点就是数据太多,容易疲劳。
二、正则。
靓号正则

1.尾号AABB:
^[0-9]{7}(\d)\1((?!\1)\d)\2$
2.尾号AAA:
^[0-9]{8}(\d)\1{2}$
3.尾号AAAB:
^[0-9]{7}(\d)\1{2}((?!\1)\d)$
4.尾号ABAB:
^[0-9]{7}(\d)((?!\1)\d)\1\2$
5.尾号AABA:
^[0-9]{7}(\d)\1((?!\1)\d)\1$
6.尾号ABAA:
^[0-9]{7}(\d)((?!\1)\d)\1{2}$
7.尾号ABBA:
^[0-9]{7}(\d)((?!\1)\d)\2\1$
8.尾号ABCC:
^[0-9]{7}(\d)((?!\1)\d)((?!\1|\2)\d)\3$

拿到数据之后,大体看了一眼,每个号码至少都含有一个数字4。第1、2、3、就不用想了肯定没有,8不想要,所以便宜的不是流量,是号码啊。。

结果

既然都是垃圾,那就在垃圾中找精品。

  • ABAB
    18953587474

  • AABA
    18954704454

  • ABAA
    18954574644
    18954584244
    18954704544
    18954724744
    18954734644

  • ABBA
    18953584774
    18953592442
    18954724334
    18954734774

要你你会选择哪个呢?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容