40行代码实现sip注册
admin
2023-07-31 01:46:10
0

最近一段时间一直在学习python,并且用python编写了一个基于sipp工具的自动化测试平台,基本功能良好。对python的兴趣也与日俱增,因此决定每周练手使用python实现一个测试功能。既然对sip熟悉,那就先从sip开始吧。

话说socket真是一个万能的消息收发机制,尤其是对于测试人员来说,学会一门语言,并且把socket玩6,也许会给你的测试工作带来很大的便利。python 的socket机制很强大,使用也很简单,如下代码就是通过简单的socket交互,实现sip消息的发送和接收。

import os
import socket
import time

host = \'172.31.225.220\'
sport = \'5060\'

# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 进行socekt配置,使其支持端口复用,否则发送方绑定5066,则无法使用该端口进行接收
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((\'172.31.225.112\', 5066))

try:
    port = int(sport)
except ValueError:
    port = socket.getservbyname(sport, \'udp\')
s.connect((host, port))

# 获取当前路径,并读取当前目录下的reg.msg文件内,作为发送的data。
# 本例子中的reg.msg为完整的REGISTER消息
path = os.getcwd()
file = os.path.join(path, \'reg.msg\')

# 由于python在进行明文读取,默认会将回车换行强制转换为/n,为了防止sip server解析错误,
# 在读取时增加了newline参数,并设置为空,则不进行转换,windows下读取为/r/n
with open(file, \"r+\", newline=\'\') as sm:
    data = sm.read()
    
# 进行循环收发,需要将reg.msg中的[users]字段替换为1001-1005
for i in range(1001, 1006):
    data = data.replace(r\"[users]\", str(i))
    print(data)
    s.sendall(data.encode(encoding=\'utf-8\'))
    while 1:
        buf = s.recv(2048)
        print(buf.decode(\'utf-8\'))
        break
    time.sleep(1) 

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...