python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制
2019-02-20 17:02
507 查看
本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常规请求如图片,css等。
**1、**首先分析提交翻译请求后URL的规律。打开chrome的开发者工具,输入翻译内容后点击“翻译”按钮,可以看到服务器返回的数据,如下图所示:
此时我们点击插件,可以看到其只有一个请求结果,相对与chrome的请求结果更加直观快速得分析请求规律。从插件返回的结果中我们可以看到请求的URL为:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule ,请求时还携带了cookies和表单数据,下面我们将其展开:
**2、**经过多次的请求翻译,并且每次翻译后都去查看插件返回的数据,比较每次翻译时发送的表单数据的值可知参数i、salt、sign、bv、ts这些是不同的,其他的数据都是一样的,因此我们需找到这些参数的赋值规律。以salt为关键词我们进行全局搜索,如下图:
搜索结果可知salt在fanyi.min.js文件中,再从该文件中搜索可得到其定义,而且同时我们也得到了其他参数的定义,这里来做个简介:
e:代表的是需要翻译的字符串。 t:代表浏览器的版本号md5值,即User-Agent的md5值。 r:当前时间的时间戳。 salt:参数r加上0-10的随机字符串。 sign:使用的是"fanyideskweb"+e+salt+"p09@Bn{h02_BIEe]$P^nG"的md5值。
知道生成原理后,我们就可以写Python代码,以下是全部代码:
import js2py import random,time import hashlib def set_user_agent(): USER_AGENTS = [ "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)", "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0", "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5" ] user_agent = random.choice(USER_AGENTS) return user_agent js_str = """ r = "" + (new Date).getTime() , i = r + parseInt(10 * Math.random(), 10);""" js_text = js2py.EvalJs() js_text.execute(js_str) def getSalt(): # salt的公式r = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)) # 方法1:利用js2py模块,获取salt值: # salt_text = js2py.EvalJs() # salt_text.execute(js_str) salt = js_text.i # 方法2:将js_str翻译成python代码获取salt值: # salt = int(time.time()*1000) + random.randint(0, 10) return salt def getMd5(v): md5 = hashlib.md5() md5.update(v.encode("utf-8")) sign = md5.hexdigest() return sign def getSign(key, salt): sign = "fanyideskweb" + key + str(salt) + "p09@Bn{h02_BIEe]$P^nG" sign = getMd5(sign) return sign class Youdao(): def __init__(self): self.headers = { "Accept": "application/json,text/javascript,*/*;q=0.01", "Accept-Encoding": "gzip,deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "Host": "fanyi.youdao.com", "Origin": "http://fanyi.youdao.com", "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", 'User-Agent': set_user_agent(), 'Referer': 'http://fanyi.youdao.com/', 'Cookie': 'OUTFOX_SEARCH_USER_ID=-315098820@10.169.0.83; JSESSIONID=aaaBADMLwT0Wj8je4pjKw; OUTFOX_SEARCH_USER_ID_NCOO=1012727192.8548353; YOUDAO_MOBILE_ACCESS_TYPE=0; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcVeHVPsZKjL9bo6tjKw; user-from=http://www.youdao.com/; from-page=http://www.youdao.com/; ___rl__test__cookies=1550646069714' } self.data = { 'i': None, "from": "AUTO", "to": "AUTO", "smartresult": "dict", 'client': 'fanyideskweb', 'keyfrom': 'fanyi.web', "doctype": "json", "version": "2.1", "action": "FY_BY_CLICKBUTTION", "typoResult": "false", "bv":getMd5(set_user_agent()), "ts":js_text.r, 'salt': None, 'sign': None } self.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' def translate(self, word): self.data['i'] = word self.data['salt'] = getSalt() self.data['sign'] =getSign(word,getSalt()) res = requests.post(self.url, headers=self.headers, data=self.data) return res.json()['translateResult'][0][0]['tgt'] if __name__ == '__main__': youdao = Youdao() while True: word=input('请输入要翻译的内容:') print("翻译结果为:{}".format(youdao.translate(word)))
运行结果如下:
相关文章推荐
- 实战利用WireShark对Telnet协议进行抓包分析
- 利用chrome自带工具分析http包
- 实战利用WireShark对Telnet协议进行抓包分析
- 基于Python开发chrome插件的方法分析
- 2018最新Python数据分析实战教程视频 python数据分析班视频 Python数据分析基础教程 利用Python进行数据分析
- TcpIP协议,HTTP,DNS 实战:基于wireshark与BurpSuite抓包分析
- 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
- 【利用python进行数据分析-学习记录】python-matplotlib中Basemap插件的安装
- 利用TCPIP Monitor分析HTTP协议的请求应答机制
- [转]NopCommerce MVC 插件机制分析
- Python项目实战——纽约出租车运行情况分析建模
- 利用python进行数据分析读书笔记
- python利用装饰器进行运算的实例分析
- 『利用Python进行数据分析学习』第四章:numpy基础学习
- 利用Python分析快三骰子游戏
- 利用Python快速搭建HTTP&FTP服务器
- Python3.4学习笔记之 idle 清屏扩展插件用法分析
- 7068-2.Python数据分析:利用数组进行数据处理
- 在Eclipse RCP应用中利用扩展点机制解藕插件的依赖关系
- nodeJS的原生http服务利用插件实现前后端交互