
刚刚 Boss 说了一个新需求,说要实现 Python 获取域用户名(不是电脑名),想请教一下该如何实现呢 我刚刚查了一下好像有一个 ldap 的库 除此之外还要实现域用户的登陆。时间紧急,希望能有 Python 大神赐教~Thx in advance.
1 shaivas Aug 4, 2016 via Android 获取域用户名可以通过系统命令 |
2 GlobalNPC Aug 4, 2016 os.system(cmd) |
3 upczww Aug 4, 2016 我查了一下资料, windows 提供了 net user 这个命令可以查询用户名。用 Python 可以执行系统命令,我试了一下。 import os cOntent= os.popen('net user').read() 这样就获取到命令执行结果了,下面就可以提取你想要的信息了,说得不一定对,有错的望指正。 |
6 slysly759 OP |
7 SlipStupig Aug 4, 2016 |
8 slysly759 OP @SlipStupig 太好啦 你说的这个好像真是我想要的 我这就去测试一下 |
9 lslqtz Aug 4, 2016 |
10 llajaunie Aug 4, 2016 试试环境变量? os.envrion... |
11 tuteng Aug 5, 2016 ldap 登录? |
OP @tuteng 好像是 目前是这样 写了一个管道导入数据库程序 初步要求是获取当前域用户名 其次是登陆域 我不明白登陆域是什么鬼 像 SSH 那样登陆后操作么 可是我数据都在本地存储啊 我完全搞不懂需求.... |
13 tuteng Aug 5, 2016 我看你的需求里有获取域用户名,还有登录域: 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 Aug 5, 2016 @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 Aug 5, 2016 via Android 用 wmi 模块? |
16 slysly759 OP |