局域网自动登录

laofang 2007-03-28 09:09:16
其实我是要在程序中访问一个内部网站,但这个网站会弹出一个登录对话框提示输入“用户名”和“密码”。

这个对话框是标准的windows登录对话框,就像通过 \\10.70.1.8 这种方式访问局域网中某台机器时弹出的对话框一样,所以我将标题取为“局域网自动登录”。

我有用户名和密码,我希望在程序中能实现自动登录,因为只有登录后我才能访问内部网站。用户名是: 域名\用户 这样的形式(我是XP的系统)。

搜索了一下已有的帖子,都是讲在网页中通过post方法实现网页登录的,和我这个不一样。

请教各位,高分相谢!
有不清楚我问题的跟帖,谢谢。
...全文
2578 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
donleeking 2011-02-15
  • 打赏
  • 举报
回复
楼主可否共享下代码?19061771@qq.com
sunny_xxf 2010-04-14
  • 打赏
  • 举报
回复
楼主能共享下源代码吗?呵呵,光看描述还是不知道怎么做.
kfanffvga 2009-02-23
  • 打赏
  • 举报
回复
请问lz解决了没有?我也遇到这样的问题,假如lz搞好了可否共享下源代码来让我学习学习?
microyzy 2007-04-02
  • 打赏
  • 举报
回复
佩服lz下,自汗下自己的三分热情。。。

Mackz说的对,不过如果用的是笔记本,又经常在外,还是得用lz的程序才好
laofang 2007-04-01
  • 打赏
  • 举报
回复
但如果要在程序中实现就不是那么简单了:)

简单介绍一下这个过程:
客户端请求服务器上受保护内容时,服务器返回401错误同时返回服务器支持的全部认证方式,像我访问的这个WEB服务器返回了以下三种认证方式(Basic, NTLM, Negotiate):
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="10.70.1.8"
客户端在服务器返回的认证方式中,选择一种支持的方式进行认证。因此可能是以上三种之一,程序中都要支持。

这三种方式中,Basic是最简单的,只是把用户名和密码简单的进行MIME编码后就传到服务器进行认证;

NTLM稍复杂,这方面的介绍文档很多,一些邮件服务器也支持NTLM认证。这个我现在也搞清楚了,也通过了测试。

Negotiate方式是最复杂的一种(正是我的机器采用的认证方式),是SPNEGO-based Kerberos认证。

我看到的基本都是英文的文档,还在研究中:

关于Kerberos认证可看:
The Kerberos Network Authentication Service (V5)
http://www.ietf.org/rfc/rfc1510.txt
http://msdn2.microsoft.com/en-us/library/ms995329.aspx

SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows
http://www.apps.ietf.org/rfc/rfc4559.html
http://meta.cesnet.cz/cms/opencms/en/docs/software/devel/draft-brezak-spnego-http-04.txt
http://www.ietf.org/rfc/rfc2478.txt
菜牛 2007-04-01
  • 打赏
  • 举报
回复
其实,只要用域内的用户名、密码登录到Windows网络就不会在网页上出现登录对话框了。
laofang 2007-03-31
  • 打赏
  • 举报
回复
分享一下最近看的一些相关文章:

http://www.cpcwedu.com/Document/mssecurity/111332993.htm

http://meta.cesnet.cz/cms/opencms/en/docs/software/devel/draft-brezak-spnego-http-04.txt

http://msdn2.microsoft.com/en-us/library/ms995330.aspx
king110_1 2007-03-31
  • 打赏
  • 举报
回复
d
laofang 2007-03-30
  • 打赏
  • 举报
回复
胜利在望,推荐一篇最佳介绍文档:
NTLM Authentication Scheme for HTTP
http://www.innovation.ch/personal/ronald/ntlm.html
醉马不肖 2007-03-29
  • 打赏
  • 举报
回复
DWORD WNetAddConnection2(
LPNETRESOURCE lpNetResource,
LPCTSTR lpPassword,
LPCTSTR lpUsername,
DWORD dwFlags
);
尘雨 2007-03-29
  • 打赏
  • 举报
回复
第三次request,增加header,这个header从的二次request的应答中获取
Authorization: Negotiate TlRMTVNTUAABAAAAB7IIogkACQArAAAAAwADACgAAAAFASgKAAAAD01KRldPUktHUk9VUA==

GET /aichi/introduce.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Sat, 10 Mar 2007 09:22:10 GMT
If-None-Match: "46509094f562c71:960"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAADAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAAAAAAAEgAAAAAAAAASAAAAAAAAABIAAAABcKIogUBKAoAAAAP

HTTP/1.1 304 Not Modified
Server: Microsoft-IIS/5.1
Date: Thu, 29 Mar 2007 05:06:05 GMT
X-Powered-By: ASP.NET
ETag: "46509094f562c71:960"
Content-Length: 0
尘雨 2007-03-29
  • 打赏
  • 举报
回复
第二次request,增加header,这个header从使用IE登陆的时候包中获取
Authorization: Negotiate TlRMTVNTUAABAAAAB7IIogkACQArAAAAAwADACgAAAAFASgKAAAAD01KRldPUktHUk9VUA==

GET /aichi/introduce.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Sat, 10 Mar 2007 09:22:10 GMT
If-None-Match: "46509094f562c71:960"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAABAAAAB7IIogkACQArAAAAAwADACgAAAAFASgKAAAAD01KRldPUktHUk9VUA==

HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.1
Date: Thu, 29 Mar 2007 05:06:05 GMT
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAABgAGADgAAAAFwoqicFwGBKjuYd8gsBUAAAAAACwALAA+AAAABQEoCgAAAA9NAEoARgACAAYATQBKAEYAAQAGAE0ASgBGAAQABgBtAGoAZgADAAYAbQBqAGYAAAAAAA==
Content-Length: 3715
Content-Type: text/html
尘雨 2007-03-29
  • 打赏
  • 举报
回复
测试已经成功,步骤如下
前提:
1。目标URL链接使用了NTLM认证
2。需要你知道用户名和密码
3。首先需要你用浏览器使用帐户登陆之后,获取抓包的Request Header

NTLM认证的登陆通过三次request得到
第一次request,不需要任何附加header,response应答

GET /aichi/introduce.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Sat, 10 Mar 2007 09:22:10 GMT
If-None-Match: "46509094f562c71:960"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive

HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.1
Date: Thu, 29 Mar 2007 05:06:05 GMT
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Connection: close
Content-Length: 3964
Content-Type: text/html
laofang 2007-03-29
  • 打赏
  • 举报
回复
以下是登录成功全过程中抓下来的包,前两次都失败,第三次不知为何能成功,好像和第二次也差不多。
(写了个小程序用winpcap抓包,好不容易才过滤出来,呵呵):
GET /default.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; .NET CLR 2.0.50727)
Host: 10.70.1.8
Connection: Keep-Alive
Cookie: JLWZ%5FNOTIFY%5FSelect%5FCondition=

HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.0
Date: Thu, 29 Mar 2007 04:29:55 GMT
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="10.70.1.8"
Connection: close
Content-Length: 0
Content-Type: text/html

GET /default.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; .NET CLR 2.0.50727)
Host: 10.70.1.8
Connection: Keep-Alive
Cookie: JLWZ%5FNOTIFY%5FSelect%5FCondition=
Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAADw==

HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.0
Date: Thu, 29 Mar 2007 04:30:00 GMT
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAFgAWADgAAAAFgomialmsMhC9fZ0AAAAAAAAAAJQAlABOAAAABQCTCAAAAA9DAEgASQBOAEEATQBPAEIASQBMAEUAAgAWAEMASABJAE4AQQBNAE8AQgBJAEwARQABABYASgBMAFcAWgAtAEEAUABQAFMAUgBWAAQAHgBjAGgAaQBuAGEAbQBvAGIAaQBsAGUALgBjAG8AbQADADYASgBMAFcAWgAtAEEAUABQAFMAUgBWAC4AYwBoAGkAbgBhAG0AbwBiAGkAbABlAC4AYwBvAG0AAAAAAA==
Content-Length: 0
Content-Type: text/html

GET /default.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; .NET CLR 2.0.50727)
Host: 10.70.1.8
Connection: Keep-Alive
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAIYAAAAYABgAngAAABYAFgBIAAAACgAKAF4AAAAeAB4AaAAAAAAAAAC2AAAABYKIogUBKAoAAAAPYwBoAGkAbgBhAG0AbwBiAGkAbABlAGMAcwA1ADcAMQBPAEYATgBJAEEASQBTAEEALQBCAEUAQwBCADQARgBqpVOjTZr//QAAAAAAAAAAAAAAAAAAAACmtxMAjUbVSrJoRUQ+uFpvoeh2E7gxllE=
Cookie: JLWZ%5FNOTIFY%5FSelect%5FCondition=

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 29 Mar 2007 04:30:00 GMT
X-Powered-By: ASP.NET
Content-Length: 12933
Content-Type: text/html
Set-Cookie: ASPSESSIONIDAQCQDQSC=HJLFDPFBLJFAMPGOGDDGMAGO; path=/
Cache-control: private


<META....
下面是登录成功后的网页内容
samwzhang 2007-03-29
  • 打赏
  • 举报
回复
关键是:你说的这个登陆框根本不是网页上的设置,而是由于你的服务器和WEB服务配置不当造成的,换句话说这个登陆框是系统登陆框,要解决,肯定要从系统角度去考虑。
samwzhang 2007-03-29
  • 打赏
  • 举报
回复
GetHttpConnection
------------------
CInternetSession::GetHttpConnection
CHttpConnection* GetHttpConnection( LPCTSTR pstrServer, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL );
Throw ( CInternetException );

CHttpConnection* GetHttpConnection( LPCTSTR pstrServer, DWORD dwflags, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL );
Throw ( CInternetException );

Return Value

A pointer to a CHttpConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.

Parameters

pstrServer

A pointer to a string containing the HTTP server name.

nPort

A number that identifies the TCP/IP port to use on the server.

pstrUserName

A pointer to a string containing the user name.

pstrPassword

A pointer to a string containing the access password.

dwflags

The flags describing

Remarks

Call this member function to establish an HTTP connection and get a pointer to a CHttpConnection object.

GetHttpConnection connects to an HTTP server, and creates and returns a pointer to a CHttpConnection object. It does not perform any specific operation on the server. If you intend to query an HTTP header, for example, you must perform this operation as a separate step. See the classes CHttpConnection and CHttpFile for information about operations you can perform by using a connection to an HTTP server. For information about browsing an HTTP site, see the member function OpenURL. See the articleInternet Programming with WinInet in Visual C++ Programmer’s Guide for steps in performing common HTTP connection tasks.

CInternetSession Overview | Class Members | Hierarchy Chart

See Also CHttpConnection, CInternetSession::GetGopherConnection, CInternetSession::GetFtpConnection, CInternetSession::OpenURL
samwzhang 2007-03-29
  • 打赏
  • 举报
回复
server服务被停用了,我再想想怎么解决。
要不你试下Hook看看能不能起作用。
laofang 2007-03-29
  • 打赏
  • 举报
回复
谢谢samwzhang,我在命令行窗口用net use命令试过,但提示错误:
发生系统错误 53。
找不到网络路径。
xxaxxaxxa 2007-03-29
  • 打赏
  • 举报
回复
帮顶
michney 2007-03-29
  • 打赏
  • 举报
回复
不专业,帮顶
加载更多回复(34)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧