Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
PROGRAMMAZIONE SOCKET CON TCP
TCP è più affidabile, e c’è un’apertura di una connessione, quindi prima della
trasmissione dei dati si va a creare un canale logico dedicato tra i due end-
system, quindi di nuovo avremo i socket aperti su client e server, quindi sui
due nodi che comunicano, questo canale logico dedicato tra i due processi si
può creare perché sul server c’è un socket di benvenuto, questo è il socket (la
porta) che è aperto in attesa di ricevere richieste di connessione, lato client
andremo di nuovo a creare un socket usato per la comunicazione, quindi sul
client si crea un socket TCP locale usato dal client per la comunicazione.
All’apertura di questo socket locale vado a specificare l’indirizzo IP del server
e la porta di benvenuto su cui il server sta ascoltando, quindi l’apertura di
questi socket a livello applicativo si traduce a livello trasporto nell’apertura di
una connessione, vuol dire che dal momento in cui il server accetta questa
richiesta di connessione viene fondamentalmente creato un nuovo socket
dedicato a quel client e a quel processo su quel client, quindi se lo stesso
client contatta il server con processi diversi vengono aperti socket diversi
quindi connessioni dedicate diverse per lo stesso client per processi diversi e
questo garantisce l’affidabilità, fondamentalmente abbiamo un canale
dedicato per la comunicazione bidirezionale tra il server-processo sul server e
il client-processo sul client.
Vediamo lo schema che in questo caso è diverso dal precedente:
Sul server ci sarà l’apertura di un socket che è quello di benvenuto, è la porta
80 del web, sulla porta 80 il server è in ascolto e in attesa di richiesta di
connessione, nel momento in cui il server riceve dal client una richiesta di
connessione e nel momento in cui accetta questa richiesta abbiamo che la
serverSocket.accept() ritorna un connection socket, è un socket di
connessione cioè è la porta dedicata a quel client e a quel processo, quindi la
connection socket è quella che poi viene usata per la comunicazione con quel
client, non quella di benvenuto ma quella di connessione.
Vediamo la sorgente python lato client:
Abbiamo la creazione di un socket dicendo stream, quindi apriamo un socket
TCP, con la connect abbiamo che il socket usa una connect per specificare il
nome del server e la porta aperta sul server. Il client socket viene utilizzato
dopo aver aperto la connessione poiché il client butta i dati dentro al socket
senza dover specificare di nuovo l’indirizzo IP e la porta del server
Vediamo lato server:
Creiamo un socket di tipo TCP, assegniamo la porta 12000 e siamo in listen,
quindi siamo in attesa di richieste di connessione. Nel momento in cui
facciamo una accept quindi serverSocket.accept() abbiamo che questa
restituisce un connection socket, questa è quindi la porta di connessione che
andiamo ad utilizzare per ricevere quindi connectionSocket.recv dove
recv=receive, essa sembra simile all’udp ma in questo caso rievere da questa
porta vuol dire essere sicuri di ricevere dati da quel client e da quel processo
su quel client, avremo quindi delle send e delle receive e attraverso quel
socket siamo sicuri che i dati provengono da quel processo su quel client.
ANALISI DEL TRAFFICO DI RETE E WIRESHARK
Ogni macchina all’interno della rete è identificata da un indirizzo, protocolli
diversi possono utilizzare indirizzi diversi, ogni macchina sulla rete ha uno o
più indirizzi, se io voglio comunicare con un’altra macchina all’interno della
rete devo conoscere il suo indirizzo e, tra gli indirizzi più comuni, c’è
l’indirizzo IP e l’indirizzo MAC, quest’ultimo è quello utilizzato al livello 2
quindi al livello datalink mentre l’IP è il tipo di indirizzo che viene utilizzato al
livello internet, ciò vuol dire che il MAC address può essere utilizzato per
indirizzare macchine all’interno della stessa sottorete mentre l’indirizzo IP è
necessario quando si vuole indirizzare una macchina al di fuori della rete
locale, quindi della stessa sottorete. Nonostante per comunicare con una
macchina all’interno della stessa sottorete sia sufficiente il MAC address, in
realtà vengono utilizzati degli indirizzi IP anche all’interno della stessa
sottorete, ci sono quindi degli indirizzi IP definiti privati che sono riservali
all’utilizzo nelle reti locali, quindi dato un IP a caso è possibile determinare se
sia pubblico o privato, privato vuol dire che può essere usato solo all’interno
di una rete locale.
Le applicazioni dell’analisi del traffico sono molte, immaginiamo di lavorare
per un’azienda e c’è un problema con la rete, allora la causa potrebbe essere
che ad esempio è rotto il router oppure potrebbe essere più complicato, per
capire il problema uso gli analizzatori di traffico, quindi strumenti che ci fanno
visualizzare tutto quello che sta accadendo sulla rete, potrebbe anche essere
che siamo sviluppatori e stiamo sviluppando software che deve fare qualcosa
con la rete come mandare dei dati, allora per testare l’applicazione usiamo
l’analizzatore di traffico che ci fa capire se stiamo mandando o ricevendo
qualcosa e come viene costruito il pacchetto che stiamo mandando, se lo
stiamo costruendo nel modo corretto o meno, quindi possiamo fare
debugging sul software, inoltre un’altra applicazione è il reverse engeneering
di protocolli proprietari, infatti non tutti i protocolli sono descritti da uno
standard aperto ma alcuni protocolli sono mantenuti segreti da alcune
compagnie software, quindi quando queste applicazioni diventano
abbastanza comuni c’è l’interesse di permettere lo sviluppo di applicazioni
open source che possano gestire. Altre applicazioni sono legate al mondo
delle performance (ad esempio voglio capire perché la mia rete è lenta) e
della sicurezza (ad esempio voglio capire se una rete è stata infettata da un
malware).
Consideriamo un po' di terminologia:
· Packet Analyzer (o sniffer): analizzatore di traffico
· Packet Capture (o sniffing): l’attività effettuata dallo sniffer
· Network Interface Card (o NIC): quando utilizziamo uno sniffer
dobbiamo decidere su quale scheda di rete far funzionare lo sniffer, ad
esempio se abbiamo un portatile con due schede di rete, una wireless
e l’altra con il cavo, quando utilizziamo wireshark esso ci chiederà su
quale scheda di rete vogliamo avviare la cattura del traffico
· Promiscuous Mode & Monitor Mode: modalità di funzionamento delle
schede di rete
Le schede di rete più comuni sono ethernet (con cavo) e quelle wifi
(wireless), una scheda di rete può funzionare in molte modalità, di
default opera nella modalità normale, se vogliamo fare in modo che la
nostra scheda di rete non scarti i pacchetti che non sono indirizzati a
noi, quindi se vogliamo fare in modo che riesca a intercettare anche i
pacchetti che non sono indirizzati a noi dobbiamo impostare la scheda
di rete in modalità promiscua, a noi questo non interessa oerchè
intercetteremo solo i pacchetti indirizzati alla nostra macchina, anche
perché per intercettare i pacchetti che sono indirizzati ad altre
macchine, impostare la modalità promiscua e basta non è sufficiente,
bisogna effetturare uno step ulteriore, un’altra modalità è la monitor
mode, ess aè relativa solo alle schede di rete wireless, cioè se voglio
intercettare tutto il traffico wireless senza connettermi a un access
point, quindi a nessuna rete wireless, posso impostare la mia scheda di
rete in modalità monitor in questo caso vedo anche pacchetti che
mandano altri.
Ci sono diversi Packet Anakyzer:
· Wireshark
· Tshark (versione command line di Wireshark)
· tcpdump
· Ngrep
Snifferemo solo il traffico indirizzato solo alla nostra macchina, quindi al
nostro indirizzo IP oppure dei pacchetti che vengono inviati a tutte le
macchine della rete, però un sistemista di rete che deve risolvere un
problema sulla rete deve vedere tutti i pacchetti che viaggiano e non solo
quelli indirizzati a se per avere un quadro completo della rete, quindi il
posizionamento dello sniffer, quindi per sniffer intendiamo la macchina su cui
troviamo wireshark etc…, dipende dalla configurazione di rete, possiamo fare
una distinzione in 3 categorie, sono all’interno della rete in cui il dispositivo di
interconnessione è un:
· Sniffing con Hub: siccome l’hub funziona come un ripetitore quindi
inoltra il traffico su tutte le porte, non abbiamo bisogno di alcuna
configurazione particolare, attacchiamo lo sniffer all’hub e
automaticamente vediamo il traffico di tutti, gli hub però sono molto
rari per ora
· Sniffing con Switch: siamo con un dispositivo di interconnessione di
livello 2 in cui il traffico non viene inoltrato su tutte le porte, quindi in
questo caso vedrei solo il traffico indirizzato alla mia macchina, per
vedere il traffico indirizzato a tutte le macchine ci sono molte soluzioni
· la migliore è il port Mirroring, alcuni switch hanno una
configurazione ch e permettono di inoltrare il traffico di una
porta dello switch a una o più porte dello stesso switch. Le porte
sono numerate per poter fare ciò.
· Hubbing Out: isolo la macchina o le macchine che mi
interessano e vado a installare l’hub
· TAP: simile al hubbing out ma non vien eutilizzato un hub ma un
TAP che è ottimizzato per l’analisi del traffico
· ARP cache poisoning: implementare quetsa soluzione può
portare problemi sulla rete, viene implementata solo se le altre
soluzioni sono infattibili oppure se sono un utilizzatore malevolo
della rete e voglio attaccare qualche dispositivo
· Sniffing con Router: rete più complessa, ad esempio rete di un’azienda
medio-grande che ha più router, in questo caso valgono i concetti di
prima: dovrei fare una mappa della rete, segmentarla, quindi
segmento 1 con router 1, segmento 2 con router 2 etc… e una volta
che ho la mappa della rete vado ad analizzare segmento per
segmento, i segmenti sono di solito fatti da switch e ora utilizzo le
tecniche viste con lo switch, quindi vado a farlo segmento per
segmento, è più dispendioso in termini di tempo e può essere più
complicato ma più è grande la rete e più è complesso analizzarla.
WEB E DNS
Il browser Web implementa il lato client che richiede al Web server una
pagina Web. I server Web memorizzano le