直截了当,我一直在寻找一种LogonUser
在 Python 中使用 Windows 函数的方法。
看到朋友使用 C 使用此函数后,我想尝试使用 Python 进行类似的过程。有办法吗?还是我需要尝试在 C 中创建该部分脚本,然后以某种方式让我的 Python 脚本调用它?
直截了当,我一直在寻找一种LogonUser
在 Python 中使用 Windows 函数的方法。
看到朋友使用 C 使用此函数后,我想尝试使用 Python 进行类似的过程。有办法吗?还是我需要尝试在 C 中创建该部分脚本,然后以某种方式让我的 Python 脚本调用它?
您可以使用以下命令直接调用 Windows API ctypes
:
import ctypes
import ctypes.wintypes
# create variable that will be filled with a token that represents the user
token = ctypes.wintypes.HANDLE()
# 3 is LOGON32_LOGON_NETWORK, 0 is LOGON32_PROVIDER_DEFAULT
if ctypes.windll.advapi32.LogonUserW(u"username", u"domain", u"password", 3, 0, ctypes.byref(token)) == 0:
# failed to login if we get 0
failed_to_login()
# close the handle to avoid leaking it
ctypes.windll.kernel32.CloseHandle(token)
您也可以在失败后调用以查看错误代码是什么,您可以在命令提示符ctypes.windll.kernel32.GetLastError()
中查找。net helpmsg nnnn
C:\>net helpmsg 1326
Logon failure: unknown user name or bad password.
如果您在 Linux 上工作,那么大致相当于 Windows 的LogonUser
功能是peercred
,如SO_PEERCRED
. (感谢超级用户 peercred 上的Grawity)。