陕西省妇幼挂号系统分析及利用

琢磨这个是有原因的,陕西省妇幼号称是西安市妇幼方面最好的医院,做产检选好了这个地方,去第一次就发现人多的要命,本来5楼排队的人能排到7楼去。有关系的找关系,没关系的…据说有凌晨3,4点甚至头一天就去排队的。如果真的是这样也就没有琢磨的余地了,本来考虑换个地方,后来发现他们有个网上预约挂号。但是数量有限也很难预约上,往往号一放出来,不到一分钟就没了,需要在放号前几个人一起盯着电脑,高度警惕不停地刷屏,得手的机会才比较高。小伙伴没有没有联想到当年的火车票抢票插件?
废话这么多,只是说个背景,当了这么多年程序员,终于能在实际中能自己用上一次!

还是进入主题,受抢票插件的启发,我就是做了一个自动挂号的脚本:用暴力方式同时发送大量请求去挂号,直到有成功的或者超过3分钟就停止(实际效果还不错,每次都能在10秒之内搞定退出)。
网址http://wsgh.sxmch.com/

1.    首先分析放号的时间

这个没什么说的,观察一两天就得出结论了:每天18:00放8天后的号,比如今天是周二,那么今天18:00会放出下周三的号,以此类推,周四放下周五的号。周六周日不能挂号。目前是这样,如果需要挂下周三的号,那就今天18:00前打开工具,工具会一直等到sleep并判断时间,直到17:59开始发请求。

2.    关于请求的内容

人工操作的时候,选某个专家或某个专科,进去看一下时间,然后填表格,点提交,over,这中间会经过3、4个网页。关键的是最后一个“提交”,手工一次一次操作,用firefox或chrome抓请求和响应包,如图。

1
过程细节不多讲了,只以挂专家号为例,最后发现的规律是:

  • a. 挂号的请求是post方式,
  • b. url参数格式http://wsgh.sxmch.com/ZhuanJia_Add.asp?Type=Save&v_NDI0MTM3NzU=%s-%s-%s

上面有三个%s,分别是专家标识,挂号日期和上下午。

  • c. post的参数中依次为:患者姓名、身份证号、手机、挂号日志和时间、是否复诊的标识。

url参数中的数据都是“加密”的,还是挺费了一番功夫才找到规律:专家标识是某个数字base64之后的结果,当然我只关注最后结果就行,找专家标识:只要在页面上点击某个专家信息,然后看url:http://wsgh.sxmch.com/ZhuanJia_Info.asp?j_NDi0MtMnngf=xxxx 后面的xxxx就是专家编号(这个zhuanjia_info真土啊)

url中的日期也是”2014-6-17″ 经base64转换之后的结果,而post参数中的日期是明文,两个需要一致。
url中的第三个参数’MQ==’表示上午,’Mw==’表示下午,也要和post参数中的具体时间段对应,要不然就会返回参数错误。

这样就好办了,比如要挂x月x日,某个专家的号,只要填好相应的参数,启动程序去发请求就行了。当然基本上我每次人和电话都不变,变的只是时间,而时间也是当前时间+8天,程序也可以搞定,其实每次运行也不需要修改。只是国家规定假日挂号时间会公布有调整,需要人工干预一下。

另外,在我司等需要代理的地方,请求中加上proxy
3.    有了以上的内容,我想不管你有没有证,作为一个程序员,不管用什么语言都是可以写出这个程序的了。再说说我选的工具吧。
还是python,同时加上找到的几个三方库:
requests发请求。
PyQuery来解析请求结果(接口跟jquery挺像的)。
用multiprocessing(标准库)来起多进程,python实际没有真正的多线程,用进程更合适一些。
整个过程再总结下就是:用multiprocessing起一个进程池,初始化4个进程(我机器4核,也许4个差不多吧,可以适当调整,没细究),然后在主进程中不停往工作队列中添加请求参数,各个进程从队列中取内容来发请求并等待结果,如果解析结果是成功,就设置一个信号,然后弹出结果页面,其他进程检测这个信号就会退出。

4.    其他:
他这个系统除了加密问题外,并发问题也没做好,如果用多进程请求往往好几个进程同时“中标”,都带回成功的结果,到网站上一看,本来只允许挂两个号,结果我自己挂了10个,只好手工再点一遍取消9个。只能适当降低一下请求的频率。
该系统看来也没做访问控制。如果加个ip数限制或者验证码什么的就没这么简单了。

代码就不贴了,估计对其他地方的也没什么用,如果哪位有需要的就联系我好了~

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. 圣托马斯说道:

    程序员就是生产力啊!

  2. 圣托马斯说道:

    号外,你老婆几个月了

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部