任何人都知道我将如何进行手动网络登录或任何其他方式来验证远程域上的用户?我需要测试身份验证。
现在我们正在使用模拟并调用任意函数。问题是将登录的任意 winapi 函数。问题是某些域允许空 session 调用该函数,从而导致误报。
这样做的唯一目标是针对未添加本地计算机的远程域获得可靠、快速的身份验证,因此我不会否认另一种方法。
这是我们通过提交 MSDN 票证获得的解决方案。
if(!LogonUser(username.c_str(), domain.c_str(), password.c_str(), LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &token))
{
debug->DebugMessage(Error::GetErrorMessageW(GetLastError()));
CloseHandle(token);
RevertToSelf();
return false;
}
if(!ImpersonateLoggedOnUser(token))
{
debug->DebugMessage(Error::GetErrorMessageW(GetLastError()));
CloseHandle(token);
RevertToSelf();
return false;
}
...
int err = NetUserModalsGet ....
if (err != ERROR_SUCCESS) logged_on = false;
RevertToSelf();
最佳答案
如果您只想回答“这些凭证对我可能不是其成员的给定域有效吗?”的问题那么你可能会在现有的东西中看到一些东西可以做到这一点。许多 Linux/UNIX 应用程序提供针对没有域成员资格的任意域的 NTLM 身份验证。最常用winbindd ,我怀疑在 Windows 系统上运行会带来麻烦。
值得注意的是虽然有一个 apache module为此,它可以在没有任何外部依赖的情况下运行。通过他们的来源,您可能会有些运气,特别是 mod_ntlm.c并查看他们如何为域 Controller 制作请求数据包并解析响应。
关于c++ - 手动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999550/