Sieci komputerowe —
ćwiczenia 6
Temat zajęć:
Programowanie sieci w Pythonie.
Literatura:
- R. Stevens, "Biblia TCP/IP" (tom 1 - Protokoły i tom 2 - Implementacje)
- Tutorial Pythona
- Dokumenty RFC wersja on-line
Zadanie 0
Wykonaj program z zadania domowego ćwiczeń 3 (parametry: ip=150.254.77.129 port=4444).
Uwaga:
Poniższe przykłady dla Pythona 2.x
Przykład 1
Przykładowe programy serwera i klienta TCP (zaczerpnięte z tutoriala).
Plikserver.py pobierz
#!/usr/bin/python
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
Plikclient.py pobierz
#!/usr/bin/python
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close # Close the socket when done
Zadanie 1
Sprawdź składnię metod klasy Socket w Pythonie. Znajdź różnice i podobieństwa względem interface'u gniazd BSD w języku C.
Zadanie 2
Napisać podobny prosty „komunikator” wykorzystujący protokół UDP.
Przykład 2
Prosty „klient” HTTP (zapytanie GET):
Plik httpGET.py pobierz
import httplib
conn = httplib.HTTPConnection("marcing.faculty.wmi.amu.edu.pl")
conn.request("GET", "/DSIKLI0/index.html")
r1 = conn.getresponse()
print r1.status, r1.reason, r1.read()
data1 = r1.read()
conn.request("GET", "/index2.html")
r2 = conn.getresponse()
print r2.status, r2.reason
data2 = r2.read()
conn.close()
Przykład 3
Zapytanie HTTP HEAD (może przydać się w części dotyczącej analizy sieci):
Plik httpHEAD.py pobierz
import httplib
conn = httplib.HTTPConnection("marcing.faculty.wmi.amu.edu.pl")
conn.request("HEAD","/DSIKLI0/index.html")
res = conn.getresponse()
print res.status, res.reason
data = res.read()
print len(data)
data == ''
Przykład 4
Zapytanie HTTP POST (może przydać się w części dotyczącej analizy sieci):
Plik httpPOST.py pobierz
import httplib, urllib
params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
'Redirecting to http://bugs.python.org/issue12524'
conn.close()
Zadanie 3
Napisz klienta SMTP lub POP3 wykorzystując odpowiednie moduły Pythona.
Zadanie 4
Jak napisać server HTTP w Pythonie?
Powtórka działu