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!!