当前位置: 首页 > news >正文

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.结言

       加油

相关文章:

  • postswigger 靶场(CSRF)攻略-- 1.没有防御措施的 CSRF 漏洞
  • 【Python】 Python 使用 Pillow 处理图像:几何变换
  • C //例 7.12 用选择法对数组中10个整数按由小到大排序。
  • 基于JAX-WS实现RESTful形式的web服务端点(endpoint)
  • 【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据
  • 家庭安全计划 挑战赛| 溺水预防
  • FTP、NFS、SAMBA系统服务一
  • Java: 实现电影信息管理系统 (javaBean)
  • 前端面试之事件循环
  • sqoop笔记(安装、配置及使用)
  • 【架构】后端项目经典分层架构介绍
  • DeepFool: a simple and accurate method to fool deep neural networks
  • 答题猜歌闯关流量主小程序开发
  • 深圳联强优创手持PDA身份证阅读器 身份证核验手持机
  • docker在虚拟机中的应用
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 30秒的PHP代码片段(1)数组 - Array
  • Brief introduction of how to 'Call, Apply and Bind'
  • co模块的前端实现
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • node学习系列之简单文件上传
  • php中curl和soap方式请求服务超时问题
  • Service Worker
  • spring-boot List转Page
  • vue-cli在webpack的配置文件探究
  • windows下如何用phpstorm同步测试服务器
  • 构建工具 - 收藏集 - 掘金
  • 规范化安全开发 KOA 手脚架
  • 和 || 运算
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 译自由幺半群
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 源码安装memcached和php memcache扩展
  • 最简单的无缝轮播
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • C# - 为值类型重定义相等性
  • ###C语言程序设计-----C语言学习(3)#
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.proxy和$.extend
  • (12)Linux 常见的三种进程状态
  • (39)STM32——FLASH闪存
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (5)STL算法之复制
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (黑马C++)L06 重载与继承
  • (七)c52学习之旅-中断
  • (算法)Game
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)关于pipe()的详细解析
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 按比例显示图片的缩略图
  • .NET 设计模式—适配器模式(Adapter Pattern)