驗證域的另一方法
系統(tǒng)
1781 0
寫此文,是希望有高手能用.Net下與AD相關的類或者名字空間寫出類似解決方案。
需求:本系統(tǒng)不在兩個域中的任何一個域中,但是要求驗證登陸的帳號(形如
UserName@Dmain
)是否在兩個域中的其中的一個域中。不能建立信任域。
小技巧:利用 Net Use命令登陸的返回值,并隱藏 命令提示符的窗口。
/**/
///
<summary>
///
向域控制器發(fā)送NetUse命令 ,返回登陸 正確與否字符可串
///
</summary>
///
<paramname="ip">
域控制器IP
</param>
///
<paramname="Domain">
域名
</param>
///
<paramname="strName">
登陸帳號
</param>
///
<paramname="strPassWord">
登陸密碼
</param>
///
<returns></returns>
public
string
[]StartApp(
string
ip,
string
Domain,
string
strName,
string
strPassWord)
{
Processapp
=
new
Process();
string
netCMD
=
"
use\\\\
"
+
ip
+
"
\\ipc$
"
+
strPassWord
+
"
/user:
"
+
Domain
+
"
\\
"
+
strName;
ProcessStartInfoinfo
=
new
ProcessStartInfo(
@"
net
"
,netCMD);
info.RedirectStandardError
=
true
;
info.RedirectStandardOutput
=
true
;
info.UseShellExecute
=
false
;
info.CreateNoWindow
=
true
;
app.StartInfo
=
info;
app.Start();
app.WaitForExit();
StreamReaderreader
=
app.StandardOutput;
string
ok
=
reader.ReadLine();
string
no
=
app.StandardError.ReadLine();
string
[]appStr
=
new
string
[
2
];
appStr[
0
]
=
ok;
appStr[
1
]
=
no;
this
.ExitApp(ip);
return
appStr;
}
/**/
///
<summary>
///
關閉NetUse到域控制器上本地的連接
///
</summary>
///
<paramname="ip">
域控制器的IP
</param>
public
void
ExitApp(
string
ip)
{
Processapp
=
new
Process();
string
netCMD
=
"
use\\\\
"
+
ip
+
"
\\ipc$/del
"
;
ProcessStartInfoinfo
=
new
ProcessStartInfo(
@"
net
"
,netCMD);
info.CreateNoWindow
=
true
;
app.StartInfo
=
info;
app.Start();
app.WaitForExit();
}
/**/
///
<summary>
///
檢查用戶是否是域中合法用戶
///
</summary>
///
<paramname="ip">
域控制器IP
</param>
///
<paramname="Domain">
域名
</param>
///
<paramname="strName">
登陸帳號
</param>
///
<paramname="strPassWord">
登陸密碼
</param>
///
<returns>
返回是否連接上信息,true連接上;false,則沒有連接上
</returns>
public
bool
CheckDomain(
string
ip,
string
Domain,
string
strName,
string
strPassWord)
{
string
[]appStr
=
this
.StartApp(ip,Domain,strName,strPassWord);
bool
CheckOK
=
false
;
if
(appStr[
0
]
!=
null
)
{
CheckOK
=
true
;
}
if
(appStr[
1
]
!=
null
)
{
CheckOK
=
false
;
}
return
CheckOK;
}
登陸按紐事件:
string
Domain1
=
System.Configuration.ConfigurationSettings.AppSettings[
"
Domain1
"
].ToString();
string
IP1
=
System.Configuration.ConfigurationSettings.AppSettings[
"
IP1
"
].ToString();
string
Domain2
=
System.Configuration.ConfigurationSettings.AppSettings[
"
Domain2
"
].ToString();
string
IP2
=
System.Configuration.ConfigurationSettings.AppSettings[
"
IP2
"
].ToString();
if
(Domain
==
Domain1)
{
if
(
this
.CheckDomain(IP1,Domain1,strName,strPassWord)
==
false
)
{
throw
new
Exception(
"
用戶名或密碼出錯
"
);
}
}
else
if
(Domain
==
Domain2)
{
if
(
this
.CheckDomain(IP2,Domain2,strName,strPassWord)
==
false
)
{
throw
new
Exception(
"
用戶名或密碼出錯
"
);
}
}
else
{
throw
new
Exception(
"
填寫的域不在域中,請檢查域名是否寫錯
"
);
}
}
希望高手能提供AD類下相關解決方法。
驗證域的另一方法
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元