具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的应用下载中防止DNS劫持的方法的流程图,如图1所示,方法包括如下步骤:
步骤S110,发送应用下载请求。
下载应用可以是计算机安装文件,手机apk文件,压缩文件,以及音乐、视频文件等。以安卓平台上的apk文件下载为例,常见的下载方式是用户通过浏览器页面,或手机app获取下载地址,例如,手机浏览器,手机助手等,用户点击app上提供的下载按钮,app根据为该下载应用预设的下载URL,向该URL对应下载服务器发送请求,获取下载应用。
本实施例中,发送下载请求的可以是终端通过例如360手机助手等应用分发平台,也可以通过一些其他的应用下载渠道。可以理解为包括运营360手机助手的应用服务器、推送(push)服务器和文件服务器,所述终端例如包括用户台式电脑或笔记本电脑等计算设备,或者包括用户手机等移动设备。
步骤S120,接收第一服务器返回的与应用下载请求对应的响应消息。
本发明中,第一服务器是指接收了应用下载请求并向客户端返回与应用下载请求对应的响应消息的服务器。
正常状况下,若应用下载请求未受到DNS劫持,应用下载请求未受到拦截,而被发送到预先指定的下载服务器中,这时,第一服务器即为app,或网页中预设URL对应的下载服务器。
若应用下载请求受到DNS劫持,例如,域名解析结果被网络运营商篡改,将下载应用的域名解析为运营商服务器的IP地址。这时,向发起应用下载请求的客户端返回响应消息的是运营商服务器,则第一服务器为运营商的服务器。
步骤S130,根据响应消息得到下载应用的第一特征信息,通过将下载应用的第一特征信息与下载应用的第二特征信息进行匹配判断应用下载过程是否收到劫持。
下载应用的第一特征信息是第一服务器返回的响应消息中的信息,例如,可以是应用下载请求发送后,第一服务器返回的响应消息中的内容长度信息,如HTTP header消息中的content-length字段,或者,下载应用从第一服务器下载的文件的MD5值等。
下载应用的第二特征信息来自第二服务器。本发明中的第二服务器即是手机下载app或浏览器页面提供的预设的下载URL对应的下载服务器。具体地,手机下载app的提供者在收集、准备下载应用时,预先从提供下载应用的第二服务器处获取的内容长度信息,MD5值或其他与第一特征信息对应的信息。也就是说,第二特征信息是下载应用的实际特征信息。
若应用下载请求未受劫持,第一特征信息和第二特征信息是一致的,响应消息都由指定的下载服务器,即第二服务器返回的。
当第一服务器返回的第一特征信息与第二特征信息,即下载应用的实际特征信息不一致时,认为应用下载过程受到劫持。
本发明的目的是避免DNS劫持而导致的下载应用错误,无法安装等问题。而在该步骤中,一种可能的情况是,应用下载请求受到了运营商的劫持,但运营商的服务器响应于该应用下载请求,提供了正确的下载应用,由于下载应用正常,不会导致上述问题。本发明将这种情况判断为未受劫持,也就是说,本发明只在运营商服务器返回的文件有误时才执行后续的步骤。这在一些情况下是有利的,因为从运营商的服务器进行下载,可能会达到较高的下载速度,节省用户时间。
步骤S140,若应用下载过程受到劫持,通过将下载应用的URL提供给代理服务器或利用域名解析服务器进行域名解析,从第二服务器获取下载应用。
当第一特征信息和第二特征信息不一致时,下载文件有误,认为下载过程受到劫持。根据运营商的劫持方式,采用代理服务器避免劫持,间接获取下载应用,或重新进行域名解析,获取第二服务器的IP等方式,从第二服务器获取下载应用。
根据本发明上述实施例提供的方法,根据下载应用的特征信息判断应用下载过程是否受到劫持,在判断受到劫持时,通过代理服务器从第二服务器间接获取下载应用,或采用另外的域名解析服务器准确获取第二服务器的IP等方式,重新从第二服务器下载。
根据该方案,避免了由于运营商的网络劫持导致的应用下载失败、下载完成的文件无法安装、或下载应用的数据包被替换、产品更新失败等问题,节省了用户的流量、费用。同时本发明的方法只在下载文件有误时执行重新下载的步骤,这有利于节省用户时间,提高下载速度。
图2示出了根据本发明另一个实施例的应用下载中防止DNS劫持的方法的流程图,该实施例以HTTP方式下载和运营商劫持为例,说明了本发明的下载方法的一种方式,如图2所示,方法包括如下步骤:
步骤S210,发送应用下载请求。
例如,用户在app界面点击按钮,想要下载手机助手,该app预先收集了手机助手的预设下载URL,该预设的下载URL对应于第二服务器。例如,该URL具体为:http://gdown.360.com/data/360shoujizhushou.apk,接收点击后,通过运营商提供的网络服务向下载服务器发送应用下载请求。
步骤S220,接收第一服务器返回的与应用下载请求对应的响应消息。
详见上一实施例步骤S120,此处不再赘述。
步骤S230,从应用下载请求对应的响应消息的HTTP头信息中提取内容长度信息。
本实施例中以第一服务器返回的响应消息中的内容长度信息为下载应用的第一特征信息。
用户在手机,电脑上通过浏览器或应用程序下载,其中一种常用的下载方式为HTTP下载,客户端和服务器之间通过HTTP协议进行文件的传送。
HTTP协议采用了请求/响应模型,浏览器或其他客户端程序向服务器发出请求,服务器返回一个包含HTTP header信息的消息作为响应消息。HTTP header中包含content-length字段,该字段的值可作为一种内容长度信息,表示服务器响应于本次HTTP请求,将要向客户端返回的HTTP消息实体的传输长度。
步骤S240,将响应消息中的内容长度信息与下载应用的实际内容长度信息进行比对,若响应消息中的内容长度信息与下载应用的实际内容长度信息不一致,则执行步骤S250;若响应消息中的内容长度信息与下载应用的实际内容长度信息一致,则执行步骤S280。
在未发生劫持的情况下,应用下载的请求发送到提供该下载应用的第二服务器上。由该第二服务器返回HTTP header信息,则HTTP header信息中的content-length的值即为实际的content-length值。
如果发生了运营商DNS劫持,并且劫持行为导致下载应用被换包,或字节错误,下载文件不完整等问题,则content-length值也发生变化,content-length值作为特征信息能够在实体消息传输之前判断应用下载过程是否受到劫持。
实际的content-length值作为第二特征信息,预先从提供下载应用的第二服务器处获取。例如,下载app上提供有多个下载应用的链接,每个下载应用的实际的content-length值由提供该下载应用的第二服务器预先计算出。app在提供下载链接时,已从第二服务器获取相应的content-length值,并存储在本地或云端等,可由app读取该实际的content-length值。
将响应消息中的content-length值与实际的content-length值比对,若两者不一致,判断应用下载过程受到劫持。
具体地,应用下载请求被运营商劫持时,应用下载请求被转到运营商的服务器。运营商服务器作为第一服务器,对应用下载请求返回包含HTTP header信息的消息,HTTPheader中的content-length表示运营商服务器将要返回的HTTP消息实体的传输长度,如果该传输长度与实际的下载应用的传输长度不一致,则说明运营商服务器可能做了换包,或是运营商提供的下载应用存在字节错误,文件缺失等,下载完成后的文件不是用户实际需求的文件或无法安装或无法正常使用。这时,下载过程不必继续进行,执行步骤S250。
步骤S250,中断应用下载过程。
具体地,中断从第一服务器,即运营商服务器获取下载应用的过程。
步骤S260,向代理服务器发送HTTP请求。
运营商的劫持方式一般是,预先从第二服务器处获取下载应用,存储在自身的服务器上,根据HTTP应用下载请求的URL判断是否能够提供对应的下载应用,如果能,则阻止用户从第二服务器进行下载,通过修改域名解析结果等方式将应用下载请求的URL解析为自身服务期的IP,以达到节省带宽费用的目的。
运营商劫持应用下载请求一般针对具有明显的下载特征的URL,例如,http://gdown.360.com/data/360shoujizhushou.apk等以apk结尾的URL,或exe,mkv等结尾的URL。
在本发明实施例中,在应用下载请求受到劫持时,通过代理服务器进行下载。将下载应用的预设URL提供给代理服务器,代理服务器根据预设URL从第二服务器获取下载应用。然后,再从代理服务器获取下载应用。
具体地,判断应用下载请求受到劫持时,向代理服务器发送HTTP请求,通过访问代理服务器的URL发送请求,该代理服务器的URL不具有下载特征,可以是以html为结尾的网页的URL,如http://gdown.360.com/redownload.html。这样,运营商不会劫持该HTTP请求。将预设URL,例如,http://gdown.360.com/data/360shoujizhushou.apk添加在该HTTP请求的request header中。代理服务器接收该HTTP请求后,从request header中解析出下载应用的目标URL,根据该目标URL从第二服务器上获取下载应用。代理服务器与第二服务器以服务器间的通信方式进行下载应用的传输,不会受到运营商的劫持。
步骤S270,从代理服务器获取下载应用。
具体地,可以通过代理服务器获取下载应用后向客户端推送,或app从代理服务器主动拉取等方式获取下载应用。
步骤S280,继续应用下载过程。
如果比对结果一致,就认为从第一服务器获取的下载应用是正确的,继续从第一服务器上的下载过程。如同上一实施例步骤S130中所述的,这有利于节省下载时间。
根据本发明上述实施例提供的方法,根据服务器响应消息中的内容长度信息与实际内容长度信息比较的方式,在应用下载实体消息传输前就能够判断劫持,根据内容长度信息的比较结果选择中断或继续从第一服务器的下载过程。
由于本实施例中的方法在实体消息传输前作出判断,判断更加及时,几乎能够完全避免用户浪费流量。
图3示出了根据本发明另一个实施例的应用下载中防止DNS劫持的方法的流程图,如图3所示,方法包括如下步骤:
步骤S310,计算应用下载请求对应文件的MD5值。
MD5用于确保信息传输完整一致,通过其特定算法为每个文件产生唯一的MD5信息摘要。
下载完成后,计算本次应用下载请求下载获取的文件的MD5值。
当然,也可以选用其他的文件校验算法,例如SHA-1等。
步骤S320,将应用下载请求对应文件的MD5值与下载应用对应文件的实际MD5值进行比对,若比对结果不一致,执行步骤S330;若比对结果一致,则流程结束。
本实施例中,计算第一服务器返回的下载应用对应文件的MD5值作为第一特征信息,以从第二服务器预先获取的下载应用对应文件的实际MD5值作为第二特征信息。
若应用下载未受劫持,下载结束后的文件来自第二服务器,MD5值与实际MD5值一致;若两者不一致,表明文件不完整或被换包,认为应用下载受到劫持。
步骤S330,向代理服务器发送HTTP请求。
步骤S340,从代理服务器获取下载应用。
步骤S330-S340的具体实现方式参见上一实施例,此处不再赘述。
与上一实施例相比,劫持者可以对不同文件进行修改而使内容长度信息与实际值一致,在本实施例中,由于MD5值与文件唯一对应,因此,根据MD5值等文件校验值的劫持判断方式更加准确。
图4示出了根据本发明另一个实施例提供的应用下载中防止DNS劫持的方法的流程图,如图4所示,方法包括如下步骤:
步骤S410,从第一服务器返回的应用下载请求的响应消息中提取内容长度信息。
步骤S420,将响应消息中的内容长度信息与下载应用的实际内容长度信息进行比对,若响应消息中的内容长度信息与下载应用的实际内容长度信息不一致,执行步骤S430;若响应消息中的内容长度信息与下载应用的实际内容长度信息一致,则执行步骤S440。
步骤S430,中断应用下载过程,执行步骤S460。
步骤S410-S430的具体描述详见上文实施例,此处不再赘述。
步骤S440,计算下载应用对应文件的MD5值。
content-length等内容长度信息的劫持判断方式较为快捷,在文件传输前能够判断出绝大多数的劫持,然而内容长度信息并不与下载应用唯一对应。因此,这种方式并不总是准确。在本实施例中,结合了内容长度信息和MD5值,对于大部分的劫持,通过步骤S410-S430作出判断,若内容长度信息一致,再通过MD5值进行判断。
步骤S450,将下载应用对应文件的MD5值与下载应用对应文件的实际MD5值进行比对,若比对结果不一致,执行步骤S460;若比对结果一致,则流程结束。
本实施例中,第一特征信息和第二特征信息的匹配涉及了内容长度信息和下载文件MD5值两种信息,判断结果更加准确。
步骤S460,通过域名解析服务器提供的接口向域名解析服务器发送下载应用的域名。
DNS劫持的常见方式是修改域名解析的结果,将下载应用的域名访问结果由第二服务器的IP转到修改后的IP。
在本发明实施例中,通过DNS劫持范围外的域名解析服务器重新获取域名解析结果,避免劫持的发生。对于app等应用程序提供的下载链接,域名解析服务器在一个数据库中保存每个下载链接的第二服务器域名和IP的对应关系。域名解析服务器还为app等应用程序提供接口,当判断劫持发生时,app通过该接口向域名解析服务器发送下载应用的域名,域名解析服务器查询数据库,找到该域名对应的IP向app返回。
步骤S470,根据域名解析服务器返回的IP地址从第二服务器下载应用。
直接通过IP地址访问第二服务器,避免了运营商的劫持。
根据本发明上述实施例提供的方法,先根据内容长度信息判断劫持,当内容长度信息一致时,继续下载过程,再计算下载文件的MD5值,进行准确判断。对大部分劫持来讲,通过内容长度信息在实体消息传输前即可做出快速判断,完全避免流量的浪费。同时也能够克服运营商对文件的修改使内容长度信息一致而无法检测的问题。
然后,通过运营商以外,或DNS劫持范围外的域名解析服务器获取下载应用域名对应的IP地址,该域名解析服务器中的IP地址和域名的关联是预先设定的,这样客户端的app可以直接通过IP地址访问,避免域名修改。避免了由于运营商的网络劫持导致的应用下载失败、下载完成的文件无法安装、或下载应用的数据包被替换、产品更新失败等问题,节省了用户的流量、费用。
图5示出了根据本发明一个实施例的应用下载中防止DNS劫持的装置的结构框图,如图5所示,装置包括:
发送模块510,适于发送应用下载请求。
本实施例中,发送下载请求的可以是终端通过例如360手机助手等应用分发平台,也可以通过一些其他的应用下载渠道。可以理解为包括运营360手机助手的应用服务器、推送(push)服务器和文件服务器,所述终端例如包括用户台式电脑或笔记本电脑等计算设备,或者包括用户手机等移动设备。
下载应用可以是计算机安装文件,手机apk文件,压缩文件,以及音乐、视频文件等。以安卓平台上的apk文件下载为例,常见的下载方式是用户通过浏览器页面,或手机app获取下载地址,例如,手机浏览器,手机助手等,用户点击app上提供的下载按钮,app根据该下载应用预设的URL,向该URL对应下载服务器发送请求,获取下载应用。
接收模块520,适于接收第一服务器返回的与应用下载请求对应的响应消息。
本发明中,第一服务器是指接收了应用下载请求并向客户端返回与应用下载请求对应的响应消息的服务器。
正常状况下,若应用下载请求未受到DNS劫持,应用下载请求未受到拦截,而被发送到预先指定的下载服务器中,这时,第一服务器即为app,或网页中预设URL对应的下载服务器。
若应用下载请求受到DNS劫持,例如,域名解析结果被网络运营商篡改,将下载应用的域名解析为运营商服务器的IP地址。这时,向发起应用下载请求的客户端返回响应消息的是运营商服务器,则第一服务器为运营商的服务器。
判断模块530,适于根据响应消息得到下载应用的第一特征信息,通过将下载应用的第一特征信息与下载应用的第二特征信息进行匹配判断应用下载过程是否受到劫持。
可选地,下载应用的第一特征信息包括应用下载请求对应的响应消息中的内容长度信息;下载应用的第二特征信息是预先从提供下载应用的第二服务器处获取的下载应用的实际内容长度信息。
判断模块530进一步包括:
提取单元5301,适于从接收模块接收的响应消息的HTTP头信息中提取内容长度信息;
第一比对单元5302,适于将响应消息中的内容长度信息与下载应用的实际内容长度信息进行比对;
判断单元5303,适于在响应消息中的内容长度信息与下载应用的实际内容长度信息不一致时,判断应用下载过程受到劫持。
可选地,下载应用的第一特征信息还包括应用下载请求对应文件的MD5值;下载应用的第二特征信息是预先从提供下载应用的第二服务器处获取的下载应用对应文件的实际MD5值。
判断模块530进一步包括:
计算单元5304,适于根据响应消息,计算应用下载请求对应文件的MD5值;
第二比对单元5305,适于将应用下载请求对应文件的MD5值与下载应用对应文件的实际MD5值进行比对;其中,下载应用对应文件的实际MD5值预先从提供下载应用的第二服务器处获取。
判断单元5303进一步适于:在应用下载请求对应文件的MD5值与下载应用对应文件的实际MD5值不一致时,判断应用下载过程受到劫持。
下载模块540,适于在应用下载过程受到劫持时,通过将下载应用的URL提供给代理服务器或利用域名解析服务器进行域名解析,从第二服务器获取所述下载应用。
可选地,下载模块540进一步包括:
代理服务器接口5401,适于将下载应用的URL提供给代理服务器,以供代理服务器根据URL从第二服务器获取下载应用。
可选地,代理服务器接口5201进一步适于:当判断模块510判断应用下载请求受到劫持时,代理服务器接口5201向代理服务器发送HTTP请求,HTTP请求中的URL即为代理服务器的URL,该URL不具有下载特征,可以是以html为结尾的网页的URL,如http://gdown.360.com/redownload.html。这样,运营商不会劫持该HTTP请求。将目标URL,例如,http://gdown.360.com/data/360shoujizhushou_16783385.apk添加在该HTTP请求的request header中。代理服务器接收该HTTP请求后,从request header中解析出下载应用的目标URL,根据该目标URL从第二服务器上获取下载应用。
第一下载单元5402,适于从代理服务器获取下载应用。
可选地,下载模块520进一步包括:
域名解析服务器接口5403,适于向域名解析服务器发送下载应用的域名,以供域名解析服务器根据下载应用的域名得到提供下载应用的第二服务器的IP地址;
第二下载单元5404,适于根据域名解析服务器返回的IP地址从第二服务器下载应用。
图6示出了根据本发明一个实施例的应用下载中防止DNS劫持的系统的结构框图,如图6所示,系统包括:上一实施例中的应用下载装置600,还包括:
第二服务器610,适于提供下载应用;
代理服务器620,适于接收应用下载装置600发送的HTTP请求,HTTP请求的HTTP头信息中添加有下载应用的URL;从HTTP请求中解析出下载应用的URL,并根据URL获取下载应用;
域名解析服务器630,适于接收应用下载装置600发送的下载应用的域名,根据下载应用的域名得到提供下载应用的第二服务器610的IP地址。
根据本发明上述实施例提供的应用下载中防止DNS劫持的装置和系统,判断模块根据下载应用content-length值,或文件MD5值等特征信息判断应用下载过程是否受到劫持,在受到劫持时,通过使用代理服务器,或者获取第二服务器IP,根据IP直接访问等方式获取来自第二服务器的下载应用。根据该方案,避免了由于运营商的网络劫持导致的下载失败、无法安装、或数据包替换、产品更新失败等问题,节省了用户的时间以及流量、费用。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用下载装置和系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。