Dies ist die Support Website des Buches:: Das Python Praxisbuch Der große Profi-Leitfaden für Programmierer Farid Hajji Addison Wesley / Pearson Education ISBN 978-3-8273-2543-3 (Sep 2008), 1298 Seiten. **************************** 14. Netzwerkprogrammierung **************************** Das Twisted Framework ===================== Screenshots: * `Eine Übersicht des Twisted Frameworks `_ Twisted installieren -------------------- URLs: * `Die Twisted Website `_ * `Die im Buch verwendete Twisted Version `_ Twisted unter Unix installieren ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Twisted installieren (Windows) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Erste Schritte ins Twisted-Universum ------------------------------------ Skizze: * `Wie Twisted-Komponenten in einem Programm zusammenwirken `_ Die Event-Schleife starten ^^^^^^^^^^^^^^^^^^^^^^^^^^ Die Event-Schleife starten (mit Ctrl-C beenden):: from twisted.internet import reactor reactor.run() Eine Funktion verspätet aufrufen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Mit ``callLater`` kann eine Funktion verspätet aufgerufen werden:: from twisted.internet import reactor def foo(name): print "CALLED foo(%s)" % (name,) reactor.stop() reactor.callLater(5, foo, "John Doe") reactor.run() Ein unhöflicher Server ^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_nullserver.py `twisted_nullserver.py `_ URLs: * `Das Programm nc (netcat) im C-Quellcode `_ * `Das Programm nc (netcat) als Binary für Windows `_ Ein nicht ganz so unhöflicher Server ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_nullserver2.py `twisted_nullserver2.py `_ Einen Server mit twistd starten ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_nullserver3.py `twisted_nullserver3.py `_ URLs: * `Manualpage von sockstat (FreeBSD-spezifisch) `_ Ein einfacher Client ^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_nullclient.py `twisted_nullclient.py `_ Was haben wir bisher gelernt? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Zeilenpufferung und ein einfacher Dialog ---------------------------------------- .. literalinclude:: ../att/netprog/twisted_helloserver.py `twisted_helloserver.py `_ .. literalinclude:: ../att/netprog/twisted_helloclient.py `twisted_helloclient.py `_ Fassen wir noch einmal zusammen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Anwendung: Ein Chatserver ------------------------- .. literalinclude:: ../att/netprog/twisted_chatserver.py `twisted_chatserver.py `_ Deferred oder: wenn ein Ergebnis auf sich warten lässt ------------------------------------------------------ Deferred benutzen ^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_fetcher.py `twisted_fetcher.py `_ Mehrere Callbacks pro Deferred ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_fetcher2.py `twisted_fetcher2.py `_ .. literalinclude:: ../att/netprog/twisted_cbebchain.py `twisted_cbebchain.py `_ Die andere Seite von Deferred ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_maybedeferred.py `twisted_maybedeferred.py `_ .. literalinclude:: ../att/netprog/twisted_defertothread.py `twisted_defertothread.py `_ Passwort-geschützte Bereiche mit cred ------------------------------------- Skizze: * `Die Architektur von twisted.cred `_ Anwendung: das cred.py-Beispiel ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In diesem Abschnitt wird das folgende Programm :file:`cred.py` stückweise vorgestellt und eingeführt. Hier können Sie es nochmal als Ganzes bewundern. .. literalinclude:: ../att/netprog/cred.py `cred.py `_ Twisted AMP (Asynchroneous Messaging Protocol) ---------------------------------------------- Die folgenden Beispiele :file:`ampserver.py` und :file:`ampclient.py` sind von der Twisted-Dokumentation entnommen. Sie werden in diesem Abschnitt ausführlich erklärt. .. literalinclude:: ../att/netprog/ampserver.py `ampserver.py `_ .. literalinclude:: ../att/netprog/ampclient.py `ampclient.py `_ Ein Schnelldurchlauf durch die Twisted-Protokolle ------------------------------------------------- Twisted Wire (selten benutzte inetd-Protokolle) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_smallservers.py `twisted_smallservers.py `_ URLs: * `Manpage des Superdämons inetd `_ Twisted FTP (File Transfer Protocol) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_ftpget.py `twisted_ftpget.py `_ Twisted DNS (Domain Name Service) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_testdns.py `twisted_testdns.py `_ Twisted Pair ^^^^^^^^^^^^ Twisted HTTP ^^^^^^^^^^^^ Twisted NNTP ^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_nntpclient.py `twisted_nntpclient.py `_ Twisted Mail ^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_pop3client.py `twisted_pop3client.py `_ .. literalinclude:: ../att/netprog/twisted_smtpclient.py `twisted_smtpclient.py `_ Twisted IRC ^^^^^^^^^^^ Das folgende Programm aus der Twisted-Dokumentation wird in diesem Abschnitt stückweise eingeführt und ausführlich erklärt. Hier steht es nochmal als Ganzes: .. literalinclude:: ../att/netprog/ircLogBot.py `ircLogBot.py `_ URLS: * `Der Ratbox IRC-Server `_ * `Das IRC Protokoll RFC 1459 `_ * `Das IRC Client Protokoll RFC 2812 `_ (Updates RFC 1459) Twisted SSH ^^^^^^^^^^^ Twisted und Datenbanken ----------------------- Wie findet man sich in Twisted zurecht? --------------------------------------- Module der Python Standard Library ================================== Server mit SocketServer schreiben --------------------------------- Screenshots: * `Das SocketServer Modul `_ .. literalinclude:: ../att/netprog/sockserv_hellotcpserver.py `sockserv_hellotcpserver.py `_ .. literalinclude:: ../att/netprog/sockserv_helloudpserver.py `sockserv_helloudpserver.py `_ .. literalinclude:: ../att/netprog/sockserv_hellotcpserver2.py `sockserv_hellotcpserver2.py `_ .. literalinclude:: ../att/netprog/sockserv_helloudpserver2.py `sockserv_helloudpserver2.py `_ .. literalinclude:: ../att/netprog/sockserv_echotcpserver.py `sockserv_echotcpserver.py `_ .. literalinclude:: ../att/netprog/sockserv_echoudpserver.py `sockserv_echoudpserver.py `_ .. literalinclude:: ../att/netprog/sockserv_echotcpserver2.py `sockserv_echotcpserver2.py `_ URLs: * `Manpage von ps (FreeBSD-spezifisch) `_ FTP mit ftplib.FTP ------------------ Mails senden mit smtplib.SMTP ----------------------------- Mails abholen mit poplib.POP3 und imaplib.IMAP4 ----------------------------------------------- .. literalinclude:: ../att/netprog/poplib_pop3client.py `poplib_pop3client.py `_ .. literalinclude:: ../att/netprog/imaplib_imap4client.py `imaplib_imap4client.py `_ Um das IMAP4-Protokoll zu verstehen, muss man die Ausgabe analysieren:: ('OK', ['(\\HasNoChildren) "/" "INBOX"', '(\\Noselect \\HasChildren) "/" "[Google Mail]"', '(\\HasNoChildren) "/" "[Google Mail]/All Mail"', '(\\HasNoChildren) "/" "[Google Mail]/Drafts"', '(\\HasNoChildren) "/" "[Google Mail]/Sent Mail"', '(\\HasNoChildren) "/" "[Google Mail]/Spam"', '(\\HasNoChildren) "/" "[Google Mail]/Starred"', '(\\HasNoChildren) "/" "[Google Mail]/Trash"']) ('OK', [('1 (UID 17 BODY[TEXT] {66}', 'This is just another Twisted.Mail POP3 Test from another\nmailbox.\n'), (' BODY[HEADER.FIELDS (SUBJECT)] {38}', 'Subject: Another Twisted.Mail Test\r\n\r\n'), ')', ('2 (UID 18 BODY[TEXT] {41}', 'This is a test for poplib and imaplib...\n'), (' BODY[HEADER.FIELDS (SUBJECT)] {41}', 'Subject: A test of poplib and imaplib\r\n\r\n'), ')']) URLs: * `Das IMAP4-Protokoll (RFC-2060) `_ Newsreader mit nntplib.NNTP --------------------------- .. literalinclude:: ../att/netprog/nntplib_nntpclient.py `nntplib_nntpclient.py `_ Telnet Clients mit telnetlib.Telnet ----------------------------------- Verteilte Programme =================== Twisted Perspective Broker -------------------------- Ein Server, den jeder aufrufen kann ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In diesem Abschnitt wird das Programm :file:`pbsimple.py` der Twisted Dokumentation vorgestellt und erklärt: .. literalinclude:: ../att/netprog/twisted_pbsimpleserver.py `twisted_pbsimpleserver.py `_ .. literalinclude:: ../att/netprog/twisted_pbsimpleclient.py `twisted_pbsimpleclient.py `_ Ein Server, bei dem man sich anmelden muss ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/twisted_pbechoserver.py `twisted_pbechoserver.py `_ .. literalinclude:: ../att/netprog/twisted_pbechoclient.py `twisted_pbechoclient.py `_ XML-RPC ------- URLs: * `Die XML-RPC Spezifikation `_ Ein Server, den jeder kontaktieren kann ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/xmlrpc_server.py `xmlrpc_server.py `_ .. literalinclude:: ../att/netprog/xmlrpc_client.py `xmlrpc_client.py `_ Eine Anfrage:: >>> from xmlrpclib import ServerProxy >>> prx = ServerProxy('http://localhost:7070', allow_none=True, verbose=True) >>> prx.addlist([10, 11, 12]) sieht so aus (HTTP-Header im Buch): .. code-block:: xml addlist 10 11 12 Und die Antwort sieht so aus (HTTP-Header im Buch): .. code-block:: xml 33 Ein selbstdokumentierender Server ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/xmlrpc_server2.py `xmlrpc_server2.py `_ Screenshots: * `So sieht die Dokumentation von xmlrpc_server2.py aus `_ Ein vielbeschäftigter Server ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/xmlrpc_threadedserver.py `xmlrpc_threadedserver.py `_ (K)ein Server mit Anmeldung ^^^^^^^^^^^^^^^^^^^^^^^^^^^ asyncore / asynchat ------------------- Eine Webseite mit asyncore herunterladen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../att/netprog/asyncore_gethttp.py `asyncore_gethttp.py `_ .. literalinclude:: ../att/netprog/asyncore_pgetter.py `asyncore_pgetter.py `_ Low-level-Programmierung mit Sockets ==================================== Die in diesem Abschnitt benutzen Funktionen des ``socket``-Moduls basieren auf folgende C-Funktionen der Berkeley Socket API: * `Manpage der C-Funktion socket(2) `_ * `Manpage der C-Funktion setsockopt(2) `_ * `Manpage der C-Funktion bind(2) `_ * `Manpage der C-Funktion listen(2) `_ * `Manpage der C-Funktion accept(2) `_ * `Manpage der C-Funktion connect(2) `_ * `Manpage der C-Funktion recv(2), recvfrom(2) `_ * `Manpage der C-Funktion send(2), sendto(2) `_ * `Manpage der C-Funktion shutdown(2) `_ * `Manpage der C-Funktion close(2) `_ .. literalinclude:: ../att/netprog/tcpserver.py `tcpserver.py `_ .. literalinclude:: ../att/netprog/tcpclient.py `tcpclient.py `_ .. literalinclude:: ../att/netprog/tcpclient2.py `tcpclient2.py `_ .. literalinclude:: ../att/netprog/threaded.py `threaded.py `_ .. literalinclude:: ../att/netprog/tcpserver2.py `tcpserver2.py `_ .. literalinclude:: ../att/netprog/udpserver.py `udpserver.py `_ .. literalinclude:: ../att/netprog/udpclient.py `udpclient.py `_ URLs: * `Das Programm nmap `_ Zusammenfassung ===============