刚刚 Boss 说了一个新需求,说要实现 Python 获取域用户名(不是电脑名),想请教一下该如何实现呢 我刚刚查了一下好像有一个 ldap 的库 除此之外还要实现域用户的登陆。时间紧急,希望能有 Python 大神赐教~Thx in advance.
1
shaivas 2016-08-04 20:06:15 +08:00 via Android
获取域用户名可以通过系统命令
|
2
infun 2016-08-04 20:16:19 +08:00
os.system(cmd)
|
3
upczww 2016-08-04 21:23:25 +08:00
我查了一下资料, windows 提供了 net user 这个命令可以查询用户名。用 Python 可以执行系统命令,我试了一下。
import os content = os.popen('net user').read() 这样就获取到命令执行结果了,下面就可以提取你想要的信息了,说得不一定对,有错的望指正。 |
6
slysly759 OP |
7
SlipStupig 2016-08-04 21:46:15 +08:00 1
|
8
slysly759 OP @SlipStupig 太好啦 你说的这个好像真是我想要的 我这就去测试一下
|
9
lslqtz 2016-08-04 21:54:24 +08:00
|
10
llajaunie 2016-08-04 22:04:49 +08:00
试试环境变量?
os.envrion... |
11
tuteng 2016-08-05 09:21:13 +08:00
ldap 登录?
|
12
slysly759 OP @tuteng 好像是
目前是这样 写了一个管道导入数据库程序 初步要求是获取当前域用户名 其次是登陆域 我不明白登陆域是什么鬼 像 SSH 那样登陆后操作么 可是我数据都在本地存储啊 我完全搞不懂需求.... |
13
tuteng 2016-08-05 09:54:48 +08:00 1
我看你的需求里有获取域用户名,还有登录域:
import ldap import time class Ldap(object): def __init__(self): self.server = "ldap 服务器地址" self.servername = "需要申请的用来登录域的名称" self.serverpass = "密码" self.handle = ldap.initialize(self.server) self.handle.protocol_version = ldap.VERSION3 self.handle.simple_bind(self.servername, self.serverpass) self.basedn = u"OU=xx 研发中心,OU=xx,OU=xxxx,DC=xxxx,DC=xxx" self.usercn = None def searchdn(self, useremail): self.searchscope = ldap.SCOPE_SUBTREE # 这个 attr 可能要根据需要来更改 self.attr = "userPrincipalName" self.retrieveattributes = None self.searchfilter = "(" + self.attr + "=" + useremail + ")" # 加入延时后测试通过,否则一直报错,怀疑中间过程太快 time.sleep(0.1) ldap_result = self.handle.search(self.basedn, self.searchscope, self.searchfilter, self.retrieveattributes) # 配置结果获取,返回 dn ,第三个参数为超时时间的设置,超过时间返回 result_type, result_data = self.handle.result(ldap_result, 0, 2) self.usercn = result_data[0][0] return self.usercn # 认证功能 def auth(self, usercn, password): try: ldapuser = ldap.initialize(self.server) ldapuser.simple_bind(usercn, password) result_type, _ = ldapuser.result(timeout=2) return result_type except Exception, e: return None 这是我根据网上的实例修改过的,用于自己项目的,可能看代码会更好理解一些。 不知道这个能不能满足你的需求。 |
14
SlipStupig 2016-08-05 10:03:15 +08:00 1
@slysly759 域和工作组是 windows 很重要的一个概念,工作组就是零散的分布式在局域网,默认登录就是本地域,而域却是一个集中管理.
一般表现就是"pc-v2ex\administrator", “\”前面的就是域名,通过"net view /domain"domain 可以看到加入的域(前提是该机器已经加入了至少一个域,否则显示工作组),分为 domain cotroller 和 users (网络版本 user 和 administrator 用户),所有的账号密码会保存在 DC 里面,这样 dc 可以控制所有的机器(有账号凭据后可以通过 SMB 协议进行一切操作),关于导出用户可以参考: https://msdn.microsoft.com/en-us/library/bb727091.aspx (如果要导出所有域成员的账户需要在 DC 上操作) |
15
ila 2016-08-05 12:47:36 +08:00 via Android
用 wmi 模块?
|
16
slysly759 OP |