ұ
IP- қ - IP- ғ ү . ұ , . TCP/IP ғ ә (ә қ ә ), UDP/IP ғ ә () .
Ә IP- (IP-) . қ қ ә өң IP- . қ ү. қ ү ң ә ө қғ ө (listen) қ . IP- ұ ә (ұ) ң қ (ңғ) ү . TCP/IP құ ү : ғ, қ ө. , ә ң IP- ә ғ , қ IP- ә ө ғ .
Socket Python-ғ ұ ү қ .
OSI ң ң:
қ
қ қ ғ. қ ң қ.
қ (Ethernet, PPP, ATM ә ..)
қ ұ , қ ң ғ қ ң , ғ ү ә ә .
(IP)
қғ ү ү .
қ (TCP, UDP ә ..)
ү ғ ң ө қ .
қ
қ қ қ. , ә қ.
Ұ ()
әң ә қ , қ құ ұ.
Қ (HTTP, FTP, SMTP, NNTP, POP3, IMAP ә ..)
қ қ қ. ү .
Ә қ ң . Socket UNIX ә Internet қ. Ә ө ң ә ң ү . ұ Internet қғ, ә қ TCP/IP UDP/IP , қ құ ү socket.AF_INET ұқ ө.
|
|
қ - ұ қ . қ ә . құғ (host) , қ ұ , қ ұ , қ.
:
import socket, string
def do_something(x):
lst = map(None, x);
lst.reverse();
return string.join(lst, "")
HOST = "" # localhost
PORT = 33333
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.bind((HOST, PORT))
while 1:
print " , ң ұ 33333"
srv.listen(1)
sock, addr = srv.accept()
while 1:
pal = sock.recv(1024)
if not pal:
break
print " %s:%s:" % addr, pal
lap = do_something(pal)
print " %s:%s:" % addr, lap
sock.send(lap)
sock.close()
:
import socket
HOST = "" # қққғ (localhost)
PORT = 33333 # қққғ
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
sock.send("")
result = sock.recv(1024)
sock.close()
print ":", result
:
ә ғ: ө қ.
ң , қ. ғ 33333 ә 127.0.0.1 . ң (listen()). ә ққ , (accept()) қ. accept() ә, қ (Ip- ұ, қққғ қ ), Socket- ә қққғ ң ң ұ қ. ү recv() ә send() ә қғ . recv()- ө . ә ү.
ң ғ ү қ. connect() ә қққғ ( қ). ә send() ә ә, қ ұқ, recv() ә .
Socket қғ . қ, ү (DNS) ұ ү :
>>> import socket
>>> socket.gethostbyaddr('www.onego.ru')
('www.onego.ru', [], ['195.161.136.4'])
>>> socket.gethostbyaddr('195.161.136.4')
('www.onego.ru', [], ['195.161.136.4'])
>>> socket.gethostname()
'rnd.onego.ru'
Python ң ұқ socket.getservbyname() . - ө құғ ө ө ү :
|
|
>>> for srv in 'http', 'ftp', 'imap', 'pop3', 'smtp':
... print socket.getservbyname(srv, 'tcp'), srv
...
80 http
21 ftp
143 imap
110 pop3
25 smtp
қ , ү, ,ә .. ө ү ө ө ұқ ұ. Socket ң қ құ қ қ ү.
Smtplib
ғ ә ө SMTP (Simple Mail Transfer Protocol, ң қ ) . SMTP ә ESMTP (SMTP ң ұқ) RFC 821 ә RFC 1869- ғ. SMTP- ұ ү smtplib . SMTP- ү, SMTP ө SMTP- қ ү құ :
smtplib.SMTP([host[, port]])
host ә port , қ , ә SMTP-ң . Ү port=25. host , ө , ә connect() ә қғ . SMTP ң ө қ ғ SMTP-ң ү ә , қ ү ә sendmail() ә quit() ә қ :
# -*- coding: cp1251 -*-
from smtplib import SMTP
fromaddr = "[email protected]" # ʳ
toaddr = "[email protected]" # ʳ
message = """From: Student <%(fromaddr)s>
To: Lecturer <%(toaddr)s>
Subject: From Python course student
MIME-Version: 1.0
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bit
ә! Python ү.
"""
connect = SMTP('mail.onego.ru')
connect.set_debuglevel(1)
connect.sendmail(fromaddr, toaddr, message % vars())
connect.quit()
, toaddr (To ө) ә ә ү. ә қ ә SMTP- SMTP-ң . ғ ұғ ә ғ (ұ ң 1- ң ):
send: 'ehlo rnd.onego.ru\r\n'
reply: '250-mail.onego.ru Hello as3-042.dialup.onego.ru [195.161.147.4],
pleased to meet you\r\n'
send: 'mail FROM:<[email protected]> size=270\r\n'
reply: '250 2.1.0 <[email protected]>... Sender ok\r\n'
send: 'rcpt TO:<[email protected]>\r\n'
reply: '250 2.1.5 <[email protected]>... Recipient ok\r\n'
send: 'data\r\n'
reply: '354 Enter mail, end with "." on a line by itself\r\n'
send: 'From: Student <[email protected]>\r\n... '
reply: '250 2.0.0 iBPFgQ7q028433 Message accepted for delivery\r\n'
send: 'quit\r\n'
reply: '221 2.0.0 mail.onego.ru closing connection\r\n'
ұ ( ққғ) ұғ ә SMTP- (EHLO, MAIL FROM, RCPT TO, DATA, QUIT), (send) ө , , қ қ ә (reply).
SMTP-ң , quit () қ.
|
|
, SMTP ө : ұ ү ң, SMTP-ң ә , ә (helo(), ehlo(), expn(), help(), mail(), rcpt(), vrfy(), send(), noop(), data()).
docmd() әң ө SMTP- . , - қ ө ү қ қ SMTP ө қ қ , қ ө:
from smtplib import SMTP
connect = SMTP('mx.abcde.ru')
connect.set_debuglevel(1)
connect.docmd("ETRN rnd.abcde.ru")
connect.quit()
ұ қ mx.abcde.ru rnd.abcde.ru қ ғ ә ө ұ ә қ ғ қғ .
smtplib.SMTP ұ ү ғ ү. ң ғ ө :
smtplib.SMTPException
қ ң ғ қ .
smtplib.SMTPServerDisconnected
қ ү ( ғ).
smtplib.SMTPResponseException
SMTP- ң қ ғ ү қ .
smtplib.SMTPSenderRefused
iii қ
smtplib.SMTPRecipientsRefused
қ қғ.
smtplib.SMTPDataError
ғ .
smtplib.SMTPConnectError
қ.
smtplib.SMTPHeloError
HELO ұ қ.
Poplib
ғ - POP3 (Post Office Protocol, қ ) қ ә қ ү қ ( RFC 1725 қғ).
қ ұ ү ә, ғ қғ ә, SMTP-ң ө . POP3 poplib POP3 қ ғ :
poplib.POP3(host[, port])
ұғ host - POP3-ң , port - (ү 110), pop_obj- POP3- ұ қ ү .
POP3- ұ ү ә ө.
import poplib, email
# Қң i i:
SERVER = "pop.server.com"
USERNAME = "user"
USERPASSWORD = "secretword"
p = poplib.POP3(SERVER)
print p.getwelcome()
# iiiң ңi
print p.user(USERNAME)
print p.pass_(USERPASSWORD)
# ң
response, lst, octets = p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:
print " %(msgnum)s %(msgsize)s" % vars()
print "UIDL =", p.uidl(int(msgnum)).split()[2]
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
|
|
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = "\n".join(lines)+"\n\n"
msg = email.message_from_string(msgtxt)
print "* : %(from)s\n* : %(to)s\n* : %(subject)s\n" % msg
# msg ( )
#
print p.quit()
:
Ә, қ ү қ .
ғ ғ:
+OK POP3 pop.server.com server ready
+OK User name accepted, password please
+OK Mailbox open, 68 messages
+OK Mailbox scan listing follows
1 4202
UIDL = 4152a47e00000004
* : KL Online Activation
...
+OK Sayonara
ә қ POP3 ң өң ә ө ғ:
Ә | POP3 | |
getwelcome() | POP3- s . | |
user(name) | USER name | name қ ө USER . |
pass_(pwd) | PASS pwd | PASS қ ө . ә QUIT ң қ ә ұғ. |
apop(user, secret) | APOP user secret | APOP . |
rpop(user) | RPOP user | RPOP ә |
stat() | STAT | әii қ қ. ұғ m , l әң ө. |
list([num]) | LIST [num] | (resp, ['num octets',...]) ғ қ, num, "+OK num octets" ө, ө. |
retr(num) | RETR num | num ө ү ә (resp, lst, octets) ң қ |
dele(num) | DELE num | Num ө ө |
rset() | RSET | ө . |
noop() | NOOP | ( қ) |
quit() | QUIT | ө. қ қ ө ( ө) ә қ әң құ . |
top(num, lines) | TOP num lines | RETR- ұқ, қ қ ә ң lines ү. (resp, lst, octets) қ. |
uidl([num]) | UIDL [num] | "unique-id listing"- ққғ ( ң ). ә : (resp, lst, octets), num ө, ә "+OK num uniqid", ө. Lst "+OK num uniqid" ү ұ. |
ұ num ө ( қ ғ ө), resp , ү қ, ә ү +OK- (ә poplib.proto_error ғ ). Octets қғ әң . uniqid қғ .
POP3- ұ ү ң ұ: , ә ң. ң, POP3- құғ , USER, PASS ( APOP RPOP) ұқ . қ ә ә ң . ұ қғ ғ. ң ң QUIT қ, POP3- қң қ ә ң, ғ ө ү ө.