Linux下C++调用python脚本实现LDAP协议通过TNLM认证连接到AD服务器

1.前言

首先要实现这个功能,必须先搞懂如何通过C++调用python脚本文件最为关键,因为两者的环境不同。本质上是在 c++ 中启动了一个 python 解释器,由解释器对 python 相关的代码进行执行,执行完毕后释放资源。

2 模块功能

2.1python

2.1.1 python功能

通过ldap3协议实现NTLM的认证,因此主体功能基本全是由python实现。

2.1.2 python的环境支持

sudo apt install python3-pip //安装python环境的支持

上面这条命令你要注意,如果你有其他的python版本,或许你可以不使用python3-pip工具,而单独的安装pip管理工具。ubuntu是上,你可以通过cd /usr/bin/下,ls python*查看你有多少个python的版本。

pip install ldap3 //安装ldap3,用于认证

2.1.3 python代码的实现NTLM认证

python我不懂,只能粗略的了解代码功能,因为这里的实现是非常简单的,代码量非常的少。

因此哪怕是第一次接触python的基本也能看懂,只要你有其他语言的基本功。这里先使用ubuntu命令行进行NTLM认证,便于查看错误信息。想放在python.py中,将第三步以下全部命令放到.py文件中,在文件开头添加 import ldap3,就可以了。

第一步:运行python3

第二步:导入ldap3模块 import ldap3

如果你在导入模块的时候,出现了类似这种报错信息,说明了你的pip工具安装ldap3并没有安装到python3中,你需要判断出ldap安装在哪个版本中,通过2.1.2的内容查看你有多少个版本,然后修改第一步导入的python版本。或者你根本没有安装ldap3

>>> import ldap3

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ModuleNotFoundError: No module named 'ldap3'

第三步:传入你服务器的IP server=ldap3.Server('ldap://<AD服务器地址>:端口号')

第四步,传入你需要认证的用户信息

conn=ldap3.Connection(server,user='username',authentication=ldap3.NTLM,password='<username>')

第五步:conn.bind() 进行绑定 三四步只是保存信息,不会发生任何情况,你参数的错误全是在这一步进行判断,通过返回对应的ldap_error_code,检查你导入数据的错误,如果成功返回

true

2.2 C++

2.2.1 C++功能

C++只是负责传递认证账号的信息,username,userpasswd等。还有接收python的返回值,基本是ldap的error_code。

2.2.2 C++调用python

这里我就不详细解释如何调用,因为CSDN大佬发了很多文章,包括小破站也有视频教学。这里推荐几篇文章,再简单说一下我用的使用不懂以及出现错误的地方,希望对python不懂的有帮助

  1. PyRun_SimpleString("sys.path.append('./script')"); //这里传入 python脚本路径的时候,不要写入脚本文件名,只需要制定python脚本所在的文件夹即可

  2. pModule = PyImport_ImportModule("myadd"); //这里传入的模块名字,是你python脚本的文件名,不要加.py

  3. pFunc = PyObject_GetAttrString(pModule, "say"); //这里传入的方法,就是python中你封装的方法,例如这里面的方法就是say,类似于C/C++的大括号,def say():以下的所有缩进内容都属于这个方法

C++调用Python的方法 //这篇文章非常的好,非常详细,如果我编写的时候看的这个文章,起码节约半个小时,所以我这篇文章主要是偏向如何使用python脚本实现NTLM认证。

3.结言

加油

相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
weilx12341 天前
C++笔记-文件IO-<fcntl.h>
c++
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
Smileyqp沛沛1 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
AI职业加油站1 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·1 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁1 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
此冬歌咏1 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s