2012-06-07 4 views
1

J'essaie de me connecter à un serveur XMPP en utilisant python. J'ai le XML à connecter, je ne suis pas sûr de savoir comment faire la partie TLS de la connexion? Je peux trouver beaucoup d'exemples pour HTTPS TLS et des exemples pour XMPP mais pas comment mettre les deux ensemble.Poignée de main TLS Python XMPP

Quelqu'un at-il un exemple de connexion XMPP en python utilisant TLS? J'essaie de me connecter à talk.google.com si cela peut vous aider.

Répondre

4

Tout d'abord, utilisez le XMPP existant library de quelqu'un d'autre au lieu d'écrire le vôtre, s'il vous plaît. Il y en a déjà beaucoup. Commencez par SleekXMPP.

Pour répondre à votre question, appelez le ssl.wrap_socket lorsque vous souhaitez lancer Start-TLS. Par exemple:

import socket 
import ssl 

sock = socket.create_connection(("example.com", 5222)) 
sock.write("""<stream:stream 
       to='example.com' 
       version='1.0' 
       xml:lang='en' 
       xmlns='jabber:client' 
       xmlns:stream='http://etherx.jabber.org/streams'>""") 
sock.recv(1000) # reads the stream:stream and stream:features. Obviously bad code, to get the point accross 
sock.write("<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>") 
sock.recv(1000) # read the proceed 
ssl_sock = ssl.wrap_socket(sock) 
ssl_sock.write("""<stream:stream 
       to='example.com' 
       version='1.0' 
       xml:lang='en' 
       xmlns='jabber:client' 
       xmlns:stream='http://etherx.jabber.org/streams'>""") 

Etc.