使用C#实现网站用户登录

简介:

我们在写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的。

HTTP协议是一个无连接的协议,也就是说这次对话的内容和状态与上次的无关,为了实现和用户的持久交互,网站与浏览器之前在刚建立会话时将在服务器内存中建立一个Session,该Session标识了该用户(浏览器),每一个Session都有一个唯一的ID,第一次建立会话时服务器将生成的这个ID传给浏览器,浏览器在接下来的浏览中每一个发向服务器的请求中都将包含该SessionID,从而标识了自己的身份。

服务器上是使用内存来保存Session中的信息,那么浏览器又使用什么来保存服务器分配的这个SessionID了?对,是Cookie。在刚建立会话时浏览器向服务器的请求中将不包含SessionID在Cookie中,服务器就认为是一个全新的会话,从而在服务器上分配一段内存给该Session用,同时将该Session的ID在Http Header中使用Set-Cookie发送给浏览器。

现在原理已经搞清楚了,那么我们就来实现一个网站的登录嘛,这里就以盛大纵横天下的登录为例。

要写这种面向协议的网络程序,抓包工具是少不了的,我们首先是要使用抓包工具分析在普通浏览器中登录时发送和接收的内容才好进一步使用C#来模拟浏览器发包。抓包工具很多,看个人爱好吧,我主要用的是HTTP Analyzer,专门针对HTTP的,太强的抓包工具把什么协议的包都抓出来反而不利于我们分析。

1.最好能清除IE的所有Cookie记录,以免对抓包分析造成影响,然后开启抓包程序。

2.在IE中输入http://zh.sdo.com/web1.0/home/fastlogin.asp 这个快速登录地址,我们将看到已经抓到了很多请求和响应的包。

3.输入用户名和密码,点击登录,IE中正常登录,停止抓包,我们要的所有信息都被抓取好了。如图:

image

4.盛大的登录机制还是属于比较复杂的,中间涉及到好几个服务器,经过分析得知(这个就是一个比较漫长的过程了,具体网站具体分析,这个分析过程我就不写了)纵横天下的登录机制为:

1)IE请求https://cas.sdo.com:80/cas/login?service=http://zh.sdo.com/web1.0/home/index.asp页面,该页面给IE一个SessionID,比如Set-Cookie: ASP.NET_SessionId=avcbse55l5e03suqi4dx3555; path=/

2)IE同时在该HTTP的正文中得到一个ticket,这个ticket将在登录中有用,当然其他网站肯定不是这样做的,这里分析的是纵横天下的。location.href    =    http://www.sdo.com/login2.asp?lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3a25%3a41.484&service=http%3a%2f%2fzh.sdo.com%2fweb1.0%2fhome%2ffastlogin.asp%3ftest%3d1; 这里lt参数就是我说的ticket了。

3)将获得的lt、用户名、密码还有一些其他的无关紧要的参数都Post到https://cas.sdo.com:80/cas/Login.PostTarget.aspx?service=http://zh.sdo.com/web1.0/home/fastlogin_after.asp 中,具体抓到的Post的数据如:warn=false&_eventId=submit&idtype=0&gamearea=0&gametype=0&challenge=3623&lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3A25%3A41.484&username=studyzy&password=1234&ekey=&challenge=3623,这里我们就只关心lt,username,password这三个参数。

4)获取一个只有登录後才能访问的页面,测试是否登录成功。

5.好,整个登录机制我们已经分析完了,接下来就是考虑代码的实现了。在面向HTTP协议上,C#中有WebRequest、WebResponse、HttpWebRequest和HttpWebResponse等类。我们主要就基于这些类进行操作,当然完全基于Socket编程也可以,但是这里就没有这个必要了。

在不设置Cookie、PostData的情况下要获得一个页面的HTML的方法很简单:

public   static   string  GetHtml( string  URL)
        
{
            WebRequest wrt;
            wrt 
= WebRequest.Create(URL);
            wrt.Credentials 
= CredentialCache.DefaultCredentials;
            WebResponse wrp;
            wrp 
= wrt.GetResponse();
            
return new StreamReader(wrp.GetResponseStream(), Encoding.Default).ReadToEnd();
        }
 

 

当需要获得服务器返回的Cookie的话,可以通过wrp.Headers.Get("Set-Cookie")方法来获取。

如果需要将Cookie加入到请求另外还Post数据的话其实也很简单,只需要将httpWebRequest对象中设置ContentLength 和Request的Stream就可以了。

httpWebRequest.ContentLength  =  byteRequest.Length;
Stream stream;
stream 
=  httpWebRequest.GetRequestStream();
stream.Write(byteRequest, 
0 , byteRequest.Length);
stream.Close(); 

 

代码我就不都贴出了,我做了一个Demo在附件中,大家有兴趣研究的可以看一下。 /Files/studyzy/LoginSdoDemo.rar

代码中实现了盛大账号的登录,其实纵横天下的登录还没有完成,接下来还有选择具体服务器,将ticket转到具体服务器上再进行验证,原理也是一样的,我这里就不再累述了。

成功登录后,接下来我们只需要每次发送请求是跟上该Cookie,服务器就认为是登录的用户在操作了,接下来就可以随便灌水、Download资源了,具体要做什么就大家自己弄了,只需要在IE中操作一篇,抓包分析出来,用C#实现同样的发包就OK!

本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/archive/2008/05/06/1184341.html,如需转载请自行联系原作者

相关文章
|
Web App开发 安全 Windows
解决:对COM 组件的调用返回了错误 HRESULT E_FAIL
  调用SHDOCVW(web浏览器) COM组件的时候,返回了错误 HRESULT E_FAIL。总结如下:     1. 在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。
7930 0
|
10月前
|
人工智能 IDE 开发工具
AI编程之手把手教你安装Qoder
Qoder是一款基于VSCode开发的AI编程工具,安装简单,界面熟悉。注册账号后下载对应系统版本,按提示完成安装即可。适合开发者快速上手,配合教程视频更易掌握。
6798 0
|
存储 机器学习/深度学习 人工智能
基于Memory Bank的Cursor长会话记忆内存库理论研究与实践
本文探讨了Memory Bank在解决大模型长期记忆问题中的应用,特别是在Cursor编程助手中的实践。Memory Bank通过分层存储、动态更新和精准检索机制,有效克服了传统模型在多轮对话中记忆丢失的问题。文章详细介绍了三种工具:Codelf、cursor-memory-bank-rules.md和One-Shot Memory Bank for Cursor的原理、配置及效果评测。其中,cursor-memory-bank-rules.md表现较好,适合项目梳理,但实际开发中的效果仍有待验证。
3089 11
基于Memory Bank的Cursor长会话记忆内存库理论研究与实践
|
数据采集 Web App开发 JavaScript
Jsoup 爬虫:轻松搞定动态加载网页内容
Jsoup 爬虫:轻松搞定动态加载网页内容
|
12月前
|
JSON 监控 API
淘宝/天猫:使用订单查询API实时追踪包裹状态,自动推送物流通知至用户
在淘宝/天猫平台,通过集成订单查询API实现物流状态实时监控,结合定时轮询与自动推送通知功能,可有效减少用户频繁刷新页面,提升购物体验。本文详解API调用原理、状态判断及Python代码实现,助力开发者构建高效、智能的物流通知系统。
1119 0
|
设计模式 人工智能 API
Cursor 上线最新 AI 模型 Claude 3.7 Max:200k上下文+200次工具调用!史上最强代码助手硬核上线
Claude 3.7 Max 是 Cursor 推出的最新 AI 模型,支持 200k 上下文窗口和 200 次工具调用,专为复杂代码任务设计,适合硬核开发者和大型项目。
1416 6
Cursor 上线最新 AI 模型 Claude 3.7 Max:200k上下文+200次工具调用!史上最强代码助手硬核上线
|
网络协议 API 网络安全
Python远程连接服务器用它就够了
Python远程连接服务器用它就够了
561 0
|
安全 应用服务中间件 网络安全
49.3k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点
mkcert是一款由Filippo Valsorda开发的免费开源工具,专为生成受信任的本地SSL/TLS证书而设计。它通过简单的命令自动生成并安装本地信任的证书,使本地环境中的HTTPS配置变得轻松无比。mkcert支持多个操作系统,已获得49.2K的GitHub Star,成为开发者首选的本地SSL工具。
1362 10
|
数据采集 SQL JSON
《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据
本文介绍了使用XXL-Job组件优化热搜数据定时更新的方法,实现了包括阿里云服务器部署、代码库下载、表结构初始化及启动等步骤,并详细展示了如何通过注解配置爬虫任务。文中通过具体示例(如抖音热搜)展示了如何将`@Scheduled`注解替换为`@XxlJob`注解,实现更灵活的任务调度。此外,还优化了前端展示,增加了热搜更新时间显示,并提供了B站热搜爬虫的实现方案。通过这些改进,使得热搜组件不仅功能完善,而且更加美观实用。详细代码可在作者提供的代码仓库中查看。
450 7
|
网络协议 智能硬件