一、背景描述
日常开发过程中观察到:通过ESL发送给FreeSWITCH的命令,在freeswitch.log中找不到记录。
查看代码发现,确实没有相关记录(mod_event_socket.c文件):
static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj)
分析后发现,大概有以下几个方法:
- 1、通过修改FreeSWITCH源代码实现
- 2、使用tcpdump抓取
示例如下:
tcpdump tcp dst port 8021 -w test1.pcap
- 3、使用python3基于libpcap实现
二、具体实现
本文基于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):
完整代码可从如下渠道获取:
三、运行效果
可使用ESL发送命令,然后用python脚本服务器托管网进行记录。发送ESL命令可使用ESL库,python3.9.12版本的ESL编译及使用,可参考这篇文章:
https://www.cnblogs.com/MikeZhang/p/py39esl-20230424.html
import socket,time def doCmd(sock,cmd): print(cmd) sock.send(cmd + b'rnrn') sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('192.168.137.32', 8021)) sock.send(b'auth ClueConrnrn') doCmd(sock,b'bgapi originate user/1000 &echo') time.sleep(10) doCmd(sock,b'bgapi hupall')
运行效果视频可从如下渠道获取:
四、资源获取
本文涉及资服务器托管网源,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20231125 获取。
好,就这么多了,希望对你有帮助。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 【网络安全 — 靶场搭建】sqlserver SQL注入靶场搭建(提供资源)
一,资源下载地址 百度网盘资源下载链接: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1tPjK…