在Python中使用/创建LogonUser函数的等效项

时间:2013-04-25 06:18:03

标签: python windows authentication

直截了当,我一直在寻找在Python中使用Windows LogonUser函数的方法。

看过朋友使用C这个函数的用法,我想用Python尝试一个类似的过程。有办法吗?或者我是否需要尝试在C中制作该部分脚本然后以某种方式让我的Python脚本调用它?

2 个答案:

答案 0 :(得分:0)

您可以使用ctypes直接调用Windows API:

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.

答案 1 :(得分:0)

如果您正在使用Linux,那么粗略等同于Windows' LogonUser functionpeercred,与SO_PEERCRED相同。 (感谢Grawity on Super User peercred)。