2016-05-26 12 views
0

Ich verwende diesen regulären Ausdruck für SIP (Session Initiation Protocol) URIs, um die verschiedenen internen Variablen zu extrahieren.Einige SIP-Header extrahieren

_syntax = re.compile('^(?P<scheme>[a-zA-Z][a-zA-Z0-9\+\-\.]*):' # scheme 
    + '(?:(?:(?P<user>[a-zA-Z0-9\-\_\.\!\~\*\'\(\)&=\+\$,;\?\/\%]+)' # user 
    + '(?::(?P<password>[^:@;\?]+))?)@)?' # password 
    + '(?:(?:(?P<host>[^;\?:]*)(?::(?P<port>[\d]+))?))' # host, port 
    + '(?:;(?P<params>[^\?]*))?' # parameters 
    + '(?:\?(?P<headers>.*))?$') # headers 
m = URI._syntax.match(value) 
    if m: 
     self.scheme, self.user, self.password, self.host, self.port, params, headers = m.groups() 

und ich mag spezifische Header wie der Kopf über, Zweig, Kontakt, CallID oder Cseq extrahieren. Die allgemeine Form einer SIP-Nachricht ist:

OPTIONS sip:172.16.18.35:5060 SIP/2.0 
Content-Length: 0 
Via: SIP/2.0/UDP 172.16.18.90:5060 
From: "fake" <sip:[email protected]> 
Supported: replaces, timer 
User-Agent: SIPPing 
To: <sip:172.16.18.35:5060> 
Contact: <sip:[email protected]:5060> 
CSeq: 1 OPTIONS 
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH 
Call-ID: [email protected] 
Date: Thu, 25 Apr 2013 003024 +0000 
Max-Forwards: 70 
+0

"Code Formatierung" ist, für zukünftige Notiz, vollständig geeignet für mehrzeiligen literalen Inhalt wie eine SIP-Nachricht (optional mit einem Kommentar deaktivieren Syntax Highlighting, der Form ' ', vorhergehend). Wenn Sie die Nachricht so formatiert hätten, würden Inhalte wie die 'To'- und' Contact'-Adressen (die wie HTML-Tags aussehen) nicht fehlen. –

Antwort

1

Ich würde vorschlagen, die Vorteile der absichtlichen Ähnlichkeiten zwischen SIP-Header-Format und RFC822 nehmen.

from email.parser import Parser 
msg = Parser().parsestr(m.group('headers')) 

... danach:

>>> msg.keys() 
['Content-Length', 'Via', 'From', 'Supported', 'User-Agent', 'To', 'Contact', 'CSeq', 'Allow', 'Call-ID', 'Date', 'Max-Forwards'] 
>>> msg['To'] 
'<sip:172.16.18.35:5060>' 
>>> msg['Date'] 
'Thu, 25 Apr 2013 003024 +0000' 

... etc. Weitere Informationen finden Sie in der Dokumentation für the Python standard-library email module.

Verwandte Themen