Python programmi per le reti

Salve ragazzi,oggi voglio condividere con voi qualche istruzione scritta in python per gestire le reti.
Il codice seguente vi permettera’ di capire se un server e’ in ascolto su porta 80.
Salviamo le istruzione in un file tcpsend.py e se avete linux lanciamolo da terminal con il comando python tcpsend.py

import socket
target_host="www.virgilio.it"
target_port= 80
#creiamo il socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#CONNETTIAMOCI AL SERVER
client.connect((target_host,target_port))
#mandiamo qualche dato in effetti non sono dati #qualsiasi ma una richiesta di connessione al server
client.send("GET / HTTP/1.1\r\nHost: virgilio.it\r\n\r\n")
#riceviamo i dati
response=client.recv(4096)
#stampiamoli
print response

Al posto di virgilio sostituite www.google.com e google.com ,vedrete che la risposta cambiera’

Creiamo il nostro primo server TcpServer.py


import socket
import threading

#ip del server e' un ip particolare
bind_ip="0.0.0.0"
#la porta del server
bind_port=9888

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#cominciamo ad ascoltare
server.bind((bind_ip,bind_port))
#stabiliamo massimo 10 connessioni

server.listen(10)
# a questo punto il programma passa ad un ciclo while
# per accettare le varie connessioni dei clienti
print " -In ascolto su %s:%d" % (bind_ip,bind_port)

# definiamo la funzione per il client da cui riceveremo i suoi dati

def aggancio_client(client_socket):
#stampiamo a video i messaggi che il cliente invia
richiestadelclient=client_socket.recv(1024)
print "- Ricevuto : s%" % richiestadelclient

#rispondiamo al client inviando un messaggio
client_socket.send("ACK!")
# chiudiamo la connessione
client_socket.close()

#Ciclo principale

while True:
#se un client tenta di collegarsi noi l'accettiamo
client,addr=server.accept()
#stampiamo l'indirizzo del client e la sua porta
print "-Connessione accettata da: %s:%d" % (addr[0],addr[1])

#creiamo con thread un processo separato entro cui sara' elaborata la
#connessione tra server e client

client_handler=threading.Thread(target=aggancio_client,args=(client,))
#facciamo partire il processo separato
client_handler.start()

Esercitazione pratica

Bene,e’ arrivato il momento di fare la nostra esercitazione pratica.
Modifichiamo la riga target_host=”www.virgilio.it” di tcpsend.py in target_host=”127.0.0.1″ e la porta da 80 a 9888.
Apriamo due terminal nel primo terminal lanciamo
python TcpSeTcpServerver.py e nel secondo terminal python tcpsend.py e vediamo cosa succede.
Nel terminal di tcpsend.py vedremo la risposta del server: ACK!.
Nel terminal di TcpServer.py vedremo i dati inviati da tcpsend.py.

Fine prima esercitazione

Bene,abbiamo fatto un piccolissimo passo nella grande rete inseguito ci costruiremo strumenti sempre piu’ complessi e utili,come un server proxy o il famoso netcat.py.
Alla prossima!!