如何使用pythonsockets发送SIP消息

2024-10-03 04:38:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用pythonsockets发送SIP消息,我已经让客户机向服务器发送了一些东西,但是我不能让客户机发送SIP消息INVITE到服务器

#!/usr/bin/python

import socket

R_IP = '192.168.2.1'
R_PORT = 5060 

message = 'INVITE sip:user1110000000350@.com SIP/2.0 To: <sip:user4110000000350@whatever.com>\x0d\x0aFrom: sip:user9990000000000@rider.com;tag=R400_BAD_REQUEST;taag=4488.1908442942.0\x0d\x0aP-Served-User: sip:user4110000000350@whatever.com\x0d\x0aCall-ID: 00000000-00001188-71C0873E-0@10.44.40.47\x0d\x0aCSeq: 1 INVITE\x0d\x0aContact: sip:user9990000000000@rider.com\x0d\x0aMax-Forwards: 70\x0d\x0aVia: SIP/2.0/TCP 10.44.40.47;branch=z9hG4bK1908442942.4488.0\x0d\x0aContent-Length: 10\x0d\x0a\x0d\x0aRandomText'

def sendPacket():
   proto = socket.getprotobyname('tcp')                         
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#, proto) 

   try:
       s.connect((R_IP , R_PORT)) 
       s.sendall(message)                                       
   except socket.error:
       pass
   finally:
       s.close()

sendPacket()

你有什么想法吗?在


Tags: ipcom消息message客户机portsocketinvite
2条回答

根据RFC 3261

  1. 每个标头必须以换行符开头,并且在标头名称之前不能有空白。在
  2. 最小SIP请求必须包含ToFromCSeqCall-IDMax-Forwards和{}头。在

这意味着您在To头之前正确地添加了换行符,但是您的答案也错误地包含了Froma头而不是{}。另外,头P-Served-User通常是不必要的。在

好吧,我知道,也许它会帮助别人。在

正确的SIP报文格式如下:

INVITE sip:user11@whatever SIP/2.0
To: <to>
Call-ID: <call_id>
<empty line>
body

所以

^{pr2}$

\r\n在没有空格的情况下非常重要

相关问题 更多 >