40行代码实现sip注册
最近一段时间一直在学习python,并且用python编写了一个基于sipp工具的自动化测试平台,基本功能良好。对python的兴趣也与日俱增,因此决定每周练手使用python实现一个测试功能。既然对sip熟悉,那就先从sip开始吧。
话说socket真是一个万能的消息收发机制,尤其是对于测试人员来说,学会一门语言,并且把socket玩6,也许会给你的测试工作带来很大的便利。python 的socket机制很强大,使用也很简单,如下代码就是通过简单的socket交互,实现sip消息的发送和接收。
import osimport socketimport timehost = '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/nwith open(file, "r+", newline='') as sm: data = sm.read()# 进行循环收发,需要将reg.msg中的[users]字段替换为1001-1005for 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)
关键字:Python, sip
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!