python3使用libpcap给ESL命令添加日志记录

这篇具有很好参考价值的文章主要介绍了python3使用libpcap给ESL命令添加日志记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作系统 :CentOS 7.6_x64
FreeSWITCH版本 :1.10.9
python版本:3.9.12
libpcap版本:1.11.0b7
 
FreeSWITCH的ESL模块用起来很方便,可以控制FreeSWITCH实现具体业务需求,但该模块没有提供ESL命令执行日志,不便于排查问题,本文展示一种使用python3基于libpcap实现ESL命令执行日志的方法,并提供示例代码及相关资源下载途径。

一、背景描述

日常开发过程中观察到:通过ESL发送给FreeSWITCH的命令,在freeswitch.log中找不到记录。
查看代码发现,确实没有相关记录(mod_event_socket.c文件):
static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj)

python3使用libpcap给ESL命令添加日志记录

分析后发现,大概有以下几个方法:

  • 1、通过修改FreeSWITCH源代码实现
文件: mod_event_socket.c
入口: api_exec

可通过switch_log_printf函数来实现。

  • 2、使用tcpdump抓取
因EventSocket模块使用的是基于TCP的文本协议,且未加密,默认端口8021,可以通过tcpdump抓取event socket服务端口获取命令记录。

python3使用libpcap给ESL命令添加日志记录

 示例如下:

tcpdump tcp dst port 8021 -w test1.pcap
  • 3、使用python3基于libpcap实现
底层原理和tcpdump一样,只是基于libpcap使用python3进行实现,会灵活很多,这也是本文终点描述的方法,具体实现在后续展开。

二、具体实现

本文基于python3.9.12实现,CentOS 7环境编译及使用python3.9.12,可参考这篇文章:
https://www.cnblogs.com/MikeZhang/p/centos7-install-py39-20220704.html

关键点如下:
1、实时抓取网卡数据

可基于libpcap实时抓取网卡数据,具体可参考我之前写的文章:

https://www.cnblogs.com/MikeZhang/p/pythonUseLibpcap20221029.html

2、解析IP头获取源地址
需要获取发送ESL命令机器的源地址以便排查问题,IP数据包里面包含有源地址,python中解析IP头的示例如下:

ipInfo = struct.unpack('!BBHHHBBH4s4s',bytes(p[14:34]))
srcIp = socket.inet_ntoa(ipInfo[-2])
dstIp = socket.inet_ntoa(ipInfo[-1])

3、解析TCP头获取具体数据
具体的ESL命令在TCP的数据部分保存,可通过解析TCP头获取ESL数据的起始下标,进而获取数据,示例如下:

tcpInfo = struct.unpack('!HHLLBBH',bytes(p[34:50]))
tcpHdrLen = (tcpInfo[4] >> 4) * 4
offset = 34 + tcpHdrLen
data = bytes(p[offset:tlen])

4、使用logging模块进行记录
可使用python自带的日志模块记录ESL命令记录,并进行存盘,便于后续查看。

示例如下:

logger.info("(%s,%s)" % (srcIp,data))

logger可在main函数中实现,指定具体的存盘文件,如果只是想控制台查看,则可以这样实现:

logger = logging.getLogger()

...

logging.basicConfig(
    level=logging.DEBUG, # DEBUG,INFO,WARNING,ERROR,CRITICAL
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%a, %d %b %Y %H:%M:%S'
)

基于上述关键点,可以实现ESL命令的日志记录,示例如下(eslLogTest1.py):

python3使用libpcap给ESL命令添加日志记录

完整代码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20231125 获取。

三、运行效果

可使用ESL发送命令,然后用python脚本进行记录。发送ESL命令可使用ESL库,python3.9.12版本的ESL编译及使用,可参考这篇文章:
https://www.cnblogs.com/MikeZhang/p/py39esl-20230424.html

也可直接使用socket,示例如下(sendcmd1.py):
import socket,time

def doCmd(sock,cmd):
    print(cmd)
    sock.send(cmd + b'\r\n\r\n')

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
sock.connect(('192.168.137.32', 8021))  
sock.send(b'auth ClueCon\r\n\r\n')
doCmd(sock,b'bgapi originate user/1000 &echo')
time.sleep(10)
doCmd(sock,b'bgapi hupall')
发送命令后,使用python实时记录的运行效果如下:

python3使用libpcap给ESL命令添加日志记录

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2023112501 获取。

四、资源获取

本文涉及资源,可以从如下途径获取:

python3使用libpcap给ESL命令添加日志记录

 关注微信公众号(聊聊博文,文末可扫码)后回复 20231125 获取。

好,就这么多了,希望对你有帮助。文章来源地址https://www.toymoban.com/news/detail-747130.html

到了这里,关于python3使用libpcap给ESL命令添加日志记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu18.04 添加python3.8环境

    默认的python环境,最好不要动,不要升级,直接加一个3.8环境进去就好 1、准备工作 2、将Deadsnakes PPA添加到系统的来源列表中 出现提示时,按Enter继续: 注:意思是按[ENTER]继续,或按Ctrl-c取消添加 3、启用存储库后,请使用以下命令安装Python 3.8 4、通过键入以下命令验证安装

    2024年01月21日
    浏览(26)
  • 解决报错:找不到命令 “python”,您的意思是 “python3” 命令来自 Debian 软件包 python3 的几种方式

    如果系统中只安装了 Python 3,在执行命令 “python …” 时系统会无法识别,但每次输入 “python3 …” 又觉得有些麻烦和累赘, 因此,以下任意一种方法可以将 “python” 命令关联到 Python 3: 创建软链接: 你可以创建一个指向 Python 3 的软链接,使 “python” 命令自动执行 Py

    2024年02月03日
    浏览(54)
  • 树莓派-python3.11 记录opencv 安装过程遇到问题

    按照这一篇进行树莓派4b安装opencv-python详细过程。 方法一:大通过编译安装,其中会遇到不少问题,之前安装过一遍走通过一次,但是python版本高了之后遇到很多问题。目前没走通,给出解决方案以供参考。  在4.配置cmake时遇到第一个问题, 这段代码会显示如下的报错:

    2024年02月03日
    浏览(38)
  • 记录移植Python3到arm开发板linux系统中

    开发板情况 arm板是公司采购的工控机。主要用来 使用python3解析excel表格处理数据。 配置如下: 配置 版本 cpu imx6dl(armv7架构) 操作系统 linux3.10 python版本 2.7 项目情况 项目中最好使用 python3 。可行的有以下几种方式: 方式 优缺点 可行度 重做文件系统 订制程度比较高,后期增

    2024年02月04日
    浏览(39)
  • 【记录】Python3|Selenium4 极速上手入门(Windows)

    环境:Windows 版本:python3,selenium 4.11.2 写这个是方便自己重装电脑时重新装 Selenium,懒得每次都重新找链接。 Chrome 和 Edge 或其他浏览器任选其一。 首先,终端运行: 官网下载Chrome:https://www.google.cn/intl/zh-CN/chrome/ 安装好Chrome之后查看Chrome版本:chrome://settings/help 如果Chrome版

    2024年02月07日
    浏览(31)
  • 自定义Python版本ESL库访问FreeSWITCH

    环境:CentOS 7.6_x64 Python版本:3.9.12 FreeSWITCH版本 :1.10.9 ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。 如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义

    2023年04月25日
    浏览(26)
  • MAC修改python3命令为py

    alias py=“/usr/bin/python3”

    2024年02月10日
    浏览(36)
  • 复现问题记录 | Stable Diffusion(LDM) (in python3)(一)

    记录复现LDM遇到的问题 conda env create -f environment.yaml 根据environment.yaml创建一个叫ldm的新环境 其中报错是需要github下载的两个模型无法获取,通过VPN单独下载 根据报错信息显示 代码放在./src文件夹下 注意一下 模型的文件名 ,根据报错和yaml分析,这里应该是用的environment.yam

    2023年04月18日
    浏览(32)
  • 记录一次M1芯片Mac折腾安装Python3的过程

    前言:是要用python搞一个跟url接口交互的脚本,来配合做服务迁移工作,但在开发和测试脚本是让python环境卡住了脖(电脑装了很多个python,并且多版本间管理的比较混乱)所以想先调试好一个版本 能用就好;并且脚本用到requests库,需要给python安装一下。 总结两件事: 装

    2024年02月16日
    浏览(25)
  • Python 日志记录:6大日志记录库的比较

    日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程。虽然某些编程语言提供内置日志记录模块作为其标准库的一部分,但大多数日志记录框架都是第三方库,例如logging (Python)、Log4j (Java)、 Zerolog (Go) 或 Winston (Node.js)。有时,组织会选择开发自定义日志记录

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包