您的位置:首页 > 理论基础 > 计算机网络

基于https系统自动登陆与动态数据处理

2009-06-16 15:48 351 查看
由于登陆https时会需要证书,我们在登陆时有时候会遇到异常:System.Net.Sockets.SocketException,

Message="由于目标机器积极拒绝,无法连接。",这可能是由于证书名称不匹配的原因,如果您无法配置

远程处理客户端以使用证书公共名称,则可以使用客户端应用程序配置文件中的以下设置重写这一不匹配

的情况。
<system.net>
<settings>
<servicePointManager
checkCertificateName="true"
/>
</settings>
</system.net>
若要以编程方式使客户端忽略证书名称不匹配,客户端必须创建一个特定类的实例,如果

certificateProblem 值为 0x800c010f,该类将实现 ICertificatePolicy 接口并实现

CheckValidationResult 方法以返回 true。然后,您必须将该对象注册到

System.Net.ServicePointManager 对象,方法是将该对象传递到

ServicePointManager.CertificatePolicy 属性。”
为了使CheckValidationResult 无条件返回true,我们声明一个TrustAllCertificatePolicy类:
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy()
{
}
public bool CheckValidationResult(ServicePoint

sp,System.Security.Cryptography.X509Certificates.X509Certificate cert,
WebRequest req, int problem)
{
return true;
}
}
然后,在请求之前加上
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
即可。
这样,代码就可以顺利和https服务器建立SSL通道了。

【上面部份内容来自互联网,已经忘记作者blog】
下面就只需要通过工具来抓包分析,我使用的是HttpAnalyzerStdV3,当然还有其他更多的工具,不过个人

感觉这个工具就足以胜任此项工作。对每一个需要我们分析的步骤中用此工作抓包,分析数据流与实际的

跳转地址。得到后就只需要HttpWebRequest将数据POST过去,用HttpWebReponse获取返回的数据。
个人总结:
1.首先要分析需要自动登陆的系统的web页面,在浏览器中通过查看源文件的方式看到html代码,分析结

构,因为有的页面可能是由多个iframe组成,而我们关注的仅仅只是其中的一个iframe,这时候查看哪个

iframe的html代码就由我们的需求确定。
2.如果需要对动态生成的数据做处理,那么我们也应该分析对应的动态数据所在页面,现实中可能通过多

个步骤才能进入某一个动态数据的页面,但在我们的模拟操作过程中,并不需要对所有的步骤进行模拟,

如果URL地址没有加密,我们可以尝试根据刚刚获取的URL地址,直接在同一进程中通过ctrl+n建一个新的

页面,输入刚才的URL地址。如果也能直接得到数据,那么就会使工作变得简单多了,因为我们模拟登陆

后,直接就可以转到这个页面来了。如果不能直接进入,那么还需要进一步抓包分析。
3.采用HttpAnalyzerStd进行抓包分析时,可以有针对性的进行分析,一些不需要的包可以不抓,避免给

分析带来麻烦,仅仅抓住某个动作发生时的包数据。
4.还应注意cookie的问题,如果系统是跳转多个服务器的话,可能需要重写cookie值。
5.由于系统中某一动作发生时可能采用javascript来实现页面的跳转,我们模拟的动作执行之后,得到的

GetResponseStream会是一个无法跳转到某某页的提示。这个时候就还需要我们将这个流中的URL地址提取

出来,再GET到这个URL.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐