Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 20 Netzwerkkommunikation
  Pfeil 20.1 Socket API
    Pfeil 20.1.1 Client/Server-Systeme
    Pfeil 20.1.2 UDP
    Pfeil 20.1.3 TCP
    Pfeil 20.1.4 Blockierende und nicht-blockierende Sockets
    Pfeil 20.1.5 Verwendung des Moduls
    Pfeil 20.1.6 Netzwerk-Byte-Order
    Pfeil 20.1.7 Multiplexende Server – select
    Pfeil 20.1.8 SocketServer
  Pfeil 20.2 Zugriff auf Ressourcen im Internet – urllib
    Pfeil 20.2.1 Verwendung des Moduls
  Pfeil 20.3 Einlesen einer URL – urlparse
  Pfeil 20.4 FTP – ftplib
  Pfeil 20.5 E-Mail
    Pfeil 20.5.1 SMTP – smtplib
    Pfeil 20.5.2 POP3 – poplib
    Pfeil 20.5.3 IMAP4 – imaplib
    Pfeil 20.5.4 Erstellen komplexer E-Mails – email
  Pfeil 20.6 Telnet – telnetlib
  Pfeil 20.7 XML-RPC
    Pfeil 20.7.1 Der Server
    Pfeil 20.7.2 Der Client
    Pfeil 20.7.3 Multicall
    Pfeil 20.7.4 Einschränkungen


Galileo Computing - Zum Seitenanfang

20.6 Telnet – telnetlib  topZur vorigen Überschrift

Das Modul telnetlib ermöglicht die Verwendung des sogenannten Telnet-Netzwerkprotokolls (Teletype Network). Telnet wurde als möglichst einfaches bidirektionales Netzwerkprotokoll konzipiert. Häufig wird Telnet dazu verwendet, einen kommandozeilenbasierenden Zugriff auf einen entfernten Rechner zu ermöglichen. Da das Telnet-Protokoll aber keine Möglichkeit zur Verschlüsselung der übertragenen Daten bietet, wurde es nach und nach von anderen, in diesem Bereich stärkeren Protokollen wie beispielsweise SSH verdrängt.

Im Modul telnetlib ist im Wesentlichen die Klasse Telnet enthalten, über die die weitere Kommunikation mit dem entfernten Rechner abläuft. Der Konstruktor der Klasse Telnet hat die folgende Schnittstelle:

telnetlib.Telnet([host[, port]])

Erzeugt eine Instanz der Klasse Telnet. Optional können bereits hier der Hostname und der Port des Rechners übergeben werden, zu dem eine Verbindung hergestellt werden soll. Wenn keiner der Parameter angegeben wird, muss die erzeugte Telnet-Instanz explizit durch Aufruf der Methode open verbunden werden. Die Angabe einer Portnummer ist nur dann notwendig, wenn die Verbindung nicht über den Standardport 23 ablaufen soll.

Die Klasse Telnet

Nachdem sie erzeugt und mit dem Zielrechner verbunden wurde, kann eine Telnet-Instanz zur Kommunikation mit dem verbundenen Rechner verwendet werden. Dazu enthält sie eine Reihe Methoden, von denen die wichtigsten im Folgenden erläutert werden sollen. Dabei sei t eine Instanz der Klasse telnetlib.Telnet.

Generell gilt, dass, wenn während einer Lese- oder Schreiboperation die Verbindung geschlossen wird, eine IOError-Exception aus der gerade aktiven Methode heraus geworfen wird.

t.read_until(expected[, timeout])

Liest ankommende Daten, bis der String expected empfangen wurde. Alternativ kann ein Timeout in Sekunden als zweiter Parameter angegeben werden, nach dessen Ablaufen der Lesevorgang abgebrochen wird. Die gelesenen Daten werden als String zurückgegeben.

t.read_all()

Liest alle ankommenden Daten, bis die Verbindung geschlossen wird. Beachten Sie, dass diese Methode das Programm auch so lange blockiert. Die gelesenen Daten werden zurückgegeben.

t.open(host[, port])

Verbindet die Telnet-Instanz zum entfernten Rechner host unter Verwendung des Ports port. Diese Funktion sollte nur aufgerufen werden, wenn die Verbindungsdaten nicht bereits dem Konstruktor der Klasse Telnet übergeben wurden.

t.close()

Schließt die Telnet-Verbindung zum entfernten Rechner.

t.write(buffer)

Sendet den String buffer zum Verbindungspartner. Diese Funktion kann das Programm blockieren, wenn die Daten nicht sofort geschrieben werden können.

Beispiel

Im folgenden Beispielprogramm soll das Modul telnetlib dazu verwendet werden, zu einem POP3-Server zu verbinden. Dabei möchten wir auf die abstrahierte Schnittstelle des Moduls poplib verzichten und dem Server direkt POP3-Kommandos senden. Da das POP3-Protokoll jedoch relativ simpel ist und auf lesbaren Kommandos basiert, stellt dies kein großes Problem dar.

Das Ziel des Programms ist es, die Ausgabe des POP3-Kommandos LIST zu erhalten, das die Indizes aller im Posteingang liegenden Mails auflistet.

Im Programm soll die Telnet-Kommunikation möglichst komfortabel über eine auf POP3 zugeschnittene Klasse ablaufen:

import telnetlib
class POP3Telnet(object):
def __init__(self, host, port): self.tel = telnetlib.Telnet(host, port) self.lese_daten()
def close(self): self.tel.close()
def lese_daten(self): return self.tel.read_until(".\r\n", 20.0)
def kommando(self, kom): self.tel.write("%s\r\n" % kom) return self.lese_daten()

Dem Konstruktor der Klasse POP3Telnet werden Hostname und Port des POP3-Servers übergeben. Intern wird dann eine Instanz der Klasse Telnet erzeugt und mit diesem Server verbunden. Durch Aufruf der Methode lese_daten wird die Begrüßungsnachricht des Servers ausgelesen und verworfen, da sie nicht weiter von Interesse ist, aber bei späteren Lesevorgängen stören würde.

Wichtig sind die Methoden lese_daten und kommando. Die Methode lese_daten liest genau einen Antwortstring des POP3-Servers ein. Eine solche Antwort wird stets durch den String ".\r\n" beendet. Der gelesene String wird zurückgegeben. Damit dieser Lesevorgang das Programm bei einem unerreichbaren Server nicht auf unbestimmte Zeit blockiert, wurde ein Timeout von 20 Sekunden festgelegt.

Die zweite wichtige Methode ist kommando. Sie erlaubt es, einen POP3-Befehl an den Server zu senden. Dieser Befehl wird inklusive eines abschließenden "\r\n" in die Telnet-Instanz geschrieben und von dieser an den verbundenen Rechner weitergeleitet. Schlussendlich wird die Antwort des Servers eingelesen und zurückgegeben.

Doch die Klasse ist nur der erste Teil des Beispielprogramms. Im nun folgenden zweiten Teil wird die Klasse POP3Telnet zur Kommunikation mit einem POP3-Server eingesetzt. Dazu werden zunächst die Zugangsdaten für den POP3-Server festgelegt:

host = "pop.test.de" 
port = 110 
user = "benutzername" 
passwd = "passwort"

Jetzt wird eine Instanz der Klasse POP3Telnet erzeugt, die mit dem angegebenen POP3-Server verbunden ist. Dann wird die Anmeldeprozedur durch Senden der Kommandos USER und PASS durchgeführt.

pop = POP3Telnet(host, port) 
pop.kommando("USER %s" % user) 
pop.kommando("PASS %s" % passwd)

An dieser Stelle sind wir, wenn bei der Anmeldung alles gut gelaufen ist, dazu in der Lage, mit beliebigen POP3-Kommandos auf den Posteingang zuzugreifen. Dann schicken wir das eingangs erwähnte LIST-Kommando. Das LIST-Kommando des POP3-Protokolls liefert eine Liste aller im Posteingang enthaltenen E–Mails. Jeder Eintrag besteht dabei aus dem ganzzahligen Index der jeweiligen E-Mail und ihrer Größe in Byte.

Beachten Sie, dass der Server auf LIST zwei Antwortstrings sendet, von denen uns nur der zweite interessiert, da dieser die Daten über vorhandene E-Mails enthält. Aus diesem Grund muss nach dem Aufruf der Methode kommando noch einmal der zweite Antwortstring eingelesen werden. Der zurückgegebene String wird ausgegeben. Im Code sieht das folgendermaßen aus:

pop.kommando("LIST") 
print pop.lese_daten() 
pop.kommando("QUIT") 
pop.close()

Zum Schluss schicken wir das Kommando QUIT an den Server und schließen die Telnet-Verbindung. Die Ausgabe des Beispielprogramms könnte folgendermaßen aussehen:

1 623 
2 614 
3 1387 
.

In diesem Fall befinden sich drei E-Mails mit den Größen 623, 614 und 1387 Byte im Posteingang.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de