zoukankan      html  css  js  c++  java
  • 【毕设梳理】开始尝试抓包

    提要:

    1. 使用fiddler抓取12306登录信息。

    2. 分析12306登录信息。

    3. 分析12306查票信息。


     1. 使用fiddler抓取12306登录信息。

    12306网站使用的是HTTPS协议,使用fiddler抓取需要以下几个步骤:

    Tools -> Options… -> HTTPS,之后如下图选中:

     

    之后便可以抓取HTTPS协议的请求和响应了。

    参考:https://jingyan.baidu.com/article/19020a0a1e9d4b529d2842bd.html

    百度上有的教程有写需要导出证书,因按照以上步骤已经可以抓取12306网站的请求和响应,暂先不研究其他步骤。

    关于抓取手机端信息(暂未尝试),参考:http://blog.csdn.net/idlear/article/details/50999490

    ——2018/02/08 更新

    使用Chrome浏览器,按F12,选择network,也可以获取请求和相应。如下图:


     2. 分析12306登录信息。

    登录时,可以看见fiddler上有很多条请求信息,但其中包括了许多与登录无关的信息,例如用GET请求跳转到登陆成功界面等。我们需要从中找到登录行为向12306系统发送的请求。根据显示,大概可以猜想登陆行为是由三个请求完成:首先是通过GET获取12306的图片验证码,接着通过POST发出验证验证码请求,最后通过POST发出验证用户账号和密码的请求。如下图所示:

     

    为了验证我的猜想,可以通过三种情况下抓取的请求来检测:

    1) 密码正确,验证码错误。

    2) 密码错误,验证码正确。

    3) 密码和验证码都错误。

    最后结果是(图片不贴):

    1) 验证码验证错误 -> 请求新的验证码图片

    2) 验证码验证成功 -> 密码验证错误 -> 请求新的验证码图片

    3) 验证码验证错误 -> 请求新的验证码图片

    总结结论步骤:

    1) 向https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.04960293982524333

    用GET方法请求验证码,&后是一个随机数,尝试可知可以不加这个随机数,得到的响应是一个jpg图片。

    2) 向https://kyfw.12306.cn/passport/captcha/captcha-check

    用POST方法请求验证验证码,请求参数为answer&login_site&rand,得到的响应是一个包括result_message和result_code的JSON对象。

    3) 如果验证码验证成功,

    向https://kyfw.12306.cn/passport/web/login

    用POST方法请求验证账户密码,请求参数是username&password&appid,得到的响应是一个包括result_message、result_code和uamtk的JSON对象。


    3. 分析12306查票信息。

    查票只用一个GET方法向

    https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2018-02-11&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=JBN&purpose_codes=ADULT

    请求即可,其中需要的参数在url中有显现:

    leftTicketDTO(车票信息,具体如下):train_date(日期)、from_station(出发地)、to_station(目的地)

    purpose_codes(0X00指学生票,ADULT指成人票)

    经过多次尝试,如选席位、选车次类型、甚至选往返日期等,GET方法依然只发送如上所述的参数,说明筛选功能是页面做的,12306服务器发来的只有跟据GET请求信息获得的全部车次的JSON数据,而不会事先筛选车次或席位返还给页面。

    响应信息如图所示:

    其中data是一个JSON对象,result是我们所需要的所有车次及其信息:车次、出发站、到达站、出发时间、到达时间、票数等等,用|隔开。

    上图中的240000G30910是火车编号,通过它能查出该列车更加详细的信息,即用GET方法向

    https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no=240000G30910&from_station_telecode=BXP&to_station_telecode=JBN&depart_date=2018-02-11

    发送请求,需要的参数是train_no(列车编号)、from_station_telecode(出发站编码)、to_station_telecode(到达站编码)和depart_date(出发日期)

    响应信息如图所示:

  • 相关阅读:
    xcodebuild changed some of the values
    ar和nm命令的使用(转载)
    POJ 3678 Katu Puzzle (2SAT)
    ZOJ 3664 Split the Rectangle 第37届ACM/ICPC长春赛区现场赛 J 题(模拟建树,暴力 求LCA)
    HDU 4115 Eliminate the Conflict (2SAT)
    ZOJ 3665 Yukari's Birthday 第37届ACM/ICPC长春赛区现场赛K题 (水题,枚举,二分)
    ZOJ 3662 Math Magic 第37届ACM/ICPC长春赛区H题(DP)
    【原创】2012ACM长春赛区现场赛总结
    ZOJ 3656 Bit Magic 第37届ACM/ICPC长春赛区现场赛B题 (2SAT)
    ZOJ 3657 The Little Girl who Picks Mushrooms 第37届ACM/ICPC长春赛区现场赛C题(水题)
  • 原文地址:https://www.cnblogs.com/sei-cxt/p/8429069.html
Copyright © 2011-2022 走看看