giugno 2007
- Introduzione
- Esempio: recupero di un feed pubblico
- tcpdump
- FiloShark
- Problema: SSL e crittografia
- Autore
- Conclusione
Introduzione
Lo sviluppo di applicazioni che interagiscono con i servizi web pone un insieme univoco di problemi. Una fonte comune di frustrazione è non sapere esattamente quale messaggio è stato inviato al server o quale risposta è stata ricevuta. Alcuni dei bug più difficili da individuare sono causati da un disallineamento tra ciò che riteniamo di essere inviato al server e ciò che accade effettivamente su un cavo.
Questo articolo introduce diversi strumenti che possono contribuire a rendere i dati sulle reti più visibili e utili. Questi strumenti, comunemente chiamati "pacchetti di pacchetti", acquisiscono tutti i pacchetti di rete che si muovono nell'interfaccia di rete. L'esame dei contenuti di questi pacchetti e dell'ordine di invio e ricezione può rappresentare una tecnica di debug utile.
Un esempio: recupero di un feed pubblico
Sto preparando una squadra ciclistica per un giro di beneficenza e ho creato un calendario per eventi come sessioni informative, raccolte fondi tra squadre e allenamenti. Ho reso pubblico questo calendario in modo che i membri del team e altri partecipanti possano vederlo e partecipare agli eventi. Voglio anche inviare una newsletter con eventi imminenti, quindi, anziché copiare le informazioni dal sito web di Google Calendar, posso utilizzare l'API di dati di Google Calendar per eseguire query su questo calendario e recuperare eventi.
La documentazione relativa all'API Google Calendar contiene informazioni su come utilizzare l'API RESTful Google Data per interagire con il mio calendario in modo programmatico. Nota del redattore: a partire dalla v3, l'API Google Calendar non utilizza più il formato dei dati di Google. La prima cosa da fare è ottenere l'URL del feed degli eventi del calendario facendo clic sul pulsante nella pagina delle impostazioni del calendario:
http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
Utilizzando la documentazione di Google Calendar come riferimento, posso recuperare e visualizzare eventi del calendario in questo modo, dove PUBLIC_FEED_URL
contiene l'URL del feed dell'evento.
CalendarService myService = new CalendarService("exampleCo-fiddlerExample-1"); final String PUBLIC_FEED_URL = "http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic"; URL feedUrl = new URL(PUBLIC_FEED_URL); CalendarEventFeed resultFeed = myService.getFeed(feedUrl, CalendarEventFeed.class); System.out.println("All events on your calendar:"); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEventEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } System.out.println();
Viene visualizzato un elenco di base degli eventi nel mio calendario:
All events on your calendar: MS150 Training ride Meeting with Nicole MS150 Information session
Lo snippet di codice riportato sopra mostra i titoli degli eventi nel calendario, ma qual è il resto dei dati che abbiamo ricevuto dal server? La libreria client Java non semplifica l'output di un feed o una voce come XML e, anche se lo fosse, il file XML non è tutta la storia. E per quanto riguarda le intestazioni HTTP che accompagnano la richiesta? La query è stata inviata tramite proxy o reindirizzata? Con operazioni più complesse, queste domande stanno diventando sempre più importanti, soprattutto quando si verificano errori e troviamo errori. Il software di sniffing dei pacchetti è in grado di rispondere a queste domande rivelando il traffico di rete.
tCPdump
tcpdump è uno strumento a riga di comando che funziona su piattaforme Unix-like, ma c'è anche una porta Windows chiamata WinDump. Come la maggior parte degli shard del pacchetto, tcpdump mette la tua scheda di rete in modalità promiscua, che richiede privilegi di super user. Per utilizzare tcpdump, è sufficiente specificare l'interfaccia di rete su cui ascoltare e il traffico di rete verrà inviato a stdout:
sudo tcpdump -i eth0
Se esegui questo comando, rimarrai bombardato da ogni tipo di traffico di rete, alcuni dei quali non riconoscerai dall'evento. Anche se in un secondo momento potresti inoltrare l'output a un file e grep, ma ciò potrebbe comportare alcuni file di grandi dimensioni. Poiché la maggior parte dei programmi di acquisizione pacchetti include alcuni meccanismi di filtro, puoi acquisire solo ciò che ti serve.
tcpdump supporta l'applicazione di filtri in base a varie caratteristiche del traffico di rete. Ad esempio, puoi indicare a tcpdump di acquisire il traffico verso o dal tuo server solo sulla porta 80 (messaggi HTTP) inserendo il nome host del server nella seguente espressione:
dst or src host <hostname> and port 80
Per ogni pacchetto che corrisponde all'espressione di filtro, tcpdump mostra un timestamp, l'origine e la destinazione del pacchetto e diversi flag TCP. Queste informazioni possono essere utili perché mostrano l'ordine in cui i pacchetti sono stati inviati e ricevuti.
Spesso è utile anche vedere i contenuti dei pacchetti. Il flag "-A" indica a tcpdump di stampare ogni pacchetto in ASCII, esponendo le intestazioni HTTP e il corpo del messaggio. Il flag "-s" viene utilizzato per specificare il numero di byte da visualizzare (dove "-s 0" significa non troncare affatto il corpo del messaggio).
Per riassumere, otteniamo il seguente comando:
sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80
Se esegui questo comando, quindi esegui il breve esempio di .Java riportato sopra, vedrai tutte le comunicazioni di rete coinvolte in questa operazione. Tra il traffico, verrà visualizzata la richiesta HTTP GET
:
22:22:30.870771 IP dellalicious.mshome.net.4520 > po-in-f99.google.com.80: P 1:360(359) ack 1 win 65535 E.....@....\...eH..c...P.=.....zP......GET /calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic HTTP/1.1 User-Agent: exampleCo-fiddlerExample-1 GCalendar-Java/1.0.6 GData-Java/1.0.10(gzip) Accept-Encoding: gzip Cache-Control: no-cache Pragma: no-cache Host: www.google.com Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive
Vedrai anche il messaggio di risposta 200 OK
contenente il feed di dati di Google. Tieni presente che il feed è suddiviso in quattro pacchetti:
22:22:31.148789 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1:1431(1430) ack 360 win 6432 E...1 ..2.I.H..c...e.P.....z.=.:P..M...HTTP/1.1 200 OK Content-Type: application/atom+xml; charset=UTF-8 Cache-Control: max-age=0, must-revalidate, private Last-Modified: Mon, 11 Jun 2007 15:11:40 GMT Transfer-Encoding: chunked Date: Sun, 24 Jun 2007 02:22:10 GMT Server: GFE/1.3 13da <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://sc hemas.google.com/gCal/2005' xmlns:gd='http://schemas.google.com/g/2005'><id>http ://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo gle.com/public/basic</id><updated>2007-06-11T15:11:40.000Z</updated><category sc heme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2 005#event'></category><title type='text'>MS150 Training Schedule</title><subtitl e type='text'>This calendar is public</subtitle><link rel='http://schemas.google .com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calend ar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic'></ link><link rel='self' type='application/atom+xml' href='http://www.google.com/ca lendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic ?max-results=25'></link><author><name>Lane LiaBraaten</name><email>api.lliabraa@ gmail.com</email></author><generator version='1.0' uri='http://www.google.com/ca lendar'>Google Calendar</generator><openSearch:totalRe 22:22:31.151501 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1431:2861(1430) ack 360 win 6432 E...1!..2.I.H..c...e.P.......=.:P.. 2...sults>3</openSearch:totalResults><openSe arch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch :itemsPerPage><gd:where valueString=''></gd:where><gCal:timezone value='America/ Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/24v j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j 740hnj46744</id><published>2007-06-11T15:11:05.000Z</published><updated>2007-06- 11T15:11:05.000Z</updated><category scheme='http://schemas.google.com/g/2005#kin d' term='http://schemas.google.com/g/2005#event'></category><title type='text'>M S150 Training ride</title><summary type='html'>When: Sat Jun 9, 2007 7am to 10am &nbsp; PDT<br> <br>Event Status: confirmed</summary><conte nt type='text'>When: Sat Jun 9, 2007 7am to 10am&nbsp; PDT<br> <b r>Event Status: confirmed</content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/event?eid=ZGd0NDAwMjJjdWkyazNqNzQwaG5qNDY3 NDQgMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel=' self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24v j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j 740hnj46744'></link><author><name>MS150 Training Schedule</name></author><gCal:s endEventNotifications value='false'></gCal:sendEventNotifications></entry><entry ><id>http://www.google.com/cal 22:22:31.153097 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 2861:4291(1430) ack 360 win 6432 E...1#..2.I.H..c...e.P.......=.:P.. ....endar/feeds/24vj3m5pl125bh2ijbbneh953s%4 0group.calendar.google.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8</id><publishe d>2007-06-11T15:08:23.000Z</published><updated>2007-06-11T15:10:39.000Z</updated ><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.g oogle.com/g/2005#event'></category><title type='text'>Meeting with Nicole</title ><summary type='html'>When: Mon Jun 4, 2007 10am to 11am&nbsp; PDT<br> <br>Where: Conference Room B <br>Event Status: confirmed</summ ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&nbsp; PDT<br& gt; <br>Where: Conference Room B <br>Event Status: confirmed <br>Event Description: Discuss building cycling team for MS150</content><l ink rel='alternate' type='text/html' href='http://www.google.com/calendar/event? eid=NTFkOGtoNHMzYnBscW5iZjFscDZwMGtqcDggMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml' href='http ://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo gle.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8'></link><author><name>MS150 Trai ning Schedule</name></author><gCal:sendEventNotifications value='false'></gCal:s endEventNotifications></entry><entry><id>http://www.google.com/calendar/feeds/24 vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/va41amq3r08dhh kpm3lc1abs2o</id><published>20 22:22:31.190244 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: P 4291:5346(1055) ack 360 win 6432 E..G1$..2.K.H..c...e.P.....<.=.:P.. ....07-06-11T15:10:08.000Z</published><updat ed>2007-06-11T15:10:08.000Z</updated><category scheme='http://schemas.google.com /g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title ty pe='text'>MS150 Information session</title><summary type='html'>When: Wed Jun 6, 2007 4pm to Wed Jun 6, 2007 5pm&nbsp; PDT<br> <br>Event Statu s: confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed Jun 6, 2007 5pm&nbsp; PDT<br> <br>Event Status: confirmed< /content><link rel='alternate' type='text/html' href='http://www.google.com/cale ndar/event?eid=dmE0MWFtcTNyMDhkaGhrcG0zbGMxYWJzMm8gMjR2ajNtNXBsMTI1YmgyaWpiYm5la Dk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.c alendar.google.com/public/basic/va41amq3r08dhhkpm3lc1abs2o'></link><author><name >MS150 Training Schedule</name></author><gCal:sendEventNotifications value='fals e'></gCal:sendEventNotifications></entry></feed>
Questo output include tutte le intestazioni e i contenuti HTTP, oltre a diversi flag TCP criptici. Tutti i dati sono presenti qui, ma sono difficili da leggere e da capire. Esistono diversi strumenti grafici che semplificano la visualizzazione di questi dati.
WireShark (in precedenza Ethereal)
WireShark visualizza il traffico di rete in diversi modi.
WireShark è uno strumento grafico creato con libpcap, la stessa libreria su cui è basato tcpdump ed è disponibile su Linux, Mac OS X e Windows. La GUI di WireShark offre diversi nuovi modi per interpretare e interagire con i dati di acquisizione dei pacchetti. Ad esempio, man mano che i pacchetti vengono acquisiti dall'interfaccia di rete, vengono visualizzati in colori diversi in base al protocollo che utilizzano. Puoi anche ordinare il traffico in base a timestamp, sorgente, destinazione e protocollo.
Se selezioni una riga nell'elenco dei pacchetti, Wireshark mostrerà le informazioni relative a IP, TCP e altre specifiche del protocollo nelle intestazioni dei pacchetti in una struttura leggibile. I dati vengono visualizzati anche in formato esadecimale e ASCII nella parte inferiore dello schermo.
Anche se la natura visiva di WireShark semplifica la comprensione del traffico di rete, nella maggior parte dei casi è consigliabile filtrarlo. WireShark offre funzionalità di filtro efficaci, incluso il supporto per centinaia di protocolli.
SUGGERIMENTO: per visualizzare i protocolli disponibili e creare filtri complessi, fai clic sul pulsante nella parte superiore della finestra di WireShark.
Per ricreare il filtro utilizzato nell'esempio tcpdump di cui sopra, puoi inserire la seguente espressione nella casella del filtro WireShark:
ip.addr==<your IP address> && tcp.port==80
Oppure sfrutta la conoscenza di HTTP di WireShark:
ip.addr==<your IP address> && http
I risultati del video clip verranno filtrati in modo da visualizzare solo i pacchetti interessati dall'interazione con il server di Google Calendar. Puoi fare clic su ogni pacchetto per visualizzarne i contenuti e assemblare la transazione.
SUGGERIMENTO: puoi fare clic con il tasto destro del mouse su uno dei pacchetti e scegliere "Segui flusso TCP" per visualizzare le richieste e le risposte in sequenza in un'unica finestra.
WireShark offre diversi modi per salvare le informazioni di acquisizione. Puoi salvare uno, alcuni o tutti i pacchetti. Se stai visualizzando uno stream TCP, puoi semplicemente fare clic sul pulsante "Salva con nome" per salvare solo i pacchetti pertinenti. Puoi anche importare l'output da un'acquisizione tcpdump e visualizzarla in WireShark.
Un problema: SSL e crittografia
Una carenza comune di strumenti di acquisizione pacchetti è l'impossibilità di visualizzare i dati criptati tramite una connessione SSL. L'esempio precedente accede a un feed pubblico, pertanto SSL non è necessario. Tuttavia, se l'esempio ha eseguito l'accesso a un feed privato, il client deve autenticarsi con il servizio di autenticazione di Google, che richiede una connessione SSL.
Lo snippet seguente è simile all'esempio precedente, ma qui CalendarService
richiede il metafeed del calendario dell'utente, che è un feed privato che richiede l'autenticazione. Per eseguire l'autenticazione, chiama semplicemente il metodo setUserCredentials
. Questo metodo attiva una richiesta HTTPS al servizio ClientLogin e recupera il token di autenticazione dalla risposta. L'oggetto CalendarService
includerà il token di autenticazione in tutte le richieste successive.
CalendarService myService = new CalendarService("exampleCo-fiddlerSslExample-1"); myService.setUserCredentials(username, userPassword); final String METAFEED_URL = "http://www.google.com/calendar/feeds/default"; URL feedUrl = new URL(METAFEED_URL); CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class); System.out.println("Your calendars:"); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } System.out.println();
Considera il traffico di rete richiesto per autenticare e accedere a un feed privato dell'API di dati di Google:
- Inviare le credenziali utente al servizio ClientLogin
- Invia un elemento
POST
HTTP a https://www.google.com/accounts/ClientLogin con i seguenti parametri nel corpo del messaggio:- Email: l'indirizzo email dell'utente.
- Passwd: la password dell'utente.
- source: identifica la tua applicazione client. Deve avere il formato nomeazienda-applicationName-versionID. Negli esempi viene utilizzato il nome ExampleCo-NavigatorSSLExample-1.
- service - il nome del servizio Google Calendar è "cl".
- Invia un elemento
- Ricevi il token di autorizzazione
- Se la richiesta di autenticazione non va a buon fine, riceverai un codice di stato non consentito HTTP 403.
- Se l'operazione ha esito positivo, la risposta del servizio è un codice di stato HTTP 200 OK, più tre codici alfanumerici lunghi nel corpo della risposta:
SID
,LSID
eAuth
. Il valoreAuth
è il token di autorizzazione.
- Richiedere un metafeed di calendario privato
- Invia un elemento
GET
HTTP a http://www.google.com/calendar/feeds/default con la seguente intestazione:
Authorization: GoogleLogin auth=<yourAuthToken>
- Invia un elemento
Prova a eseguire questo snippet e a visualizzare il traffico di rete in WireShark (utilizzando "http || ssl" come filtro). Vedrai i pacchetti SSL e TLS coinvolti nella transazione, ma i pacchetti di richiesta e risposta ClientLogin sono criptati nei pacchetti "Data Application". Non preoccuparti, poi esamineremo uno strumento che può effettivamente rivelare queste informazioni criptate.
Fiddler
Navigator è un altro strumento grafico di sniffing dei pacchetti, ma si comporta in modo molto diverso rispetto agli strumenti presentati finora. Navigator funge da proxy tra la tua applicazione e i servizi remoti con cui interagisci, diventando in effetti un punto di riferimento centrale. oltre a stabilire una connessione SSL sia con l'applicazione sia con il servizio web remoto, decriptando il traffico da un endpoint, rilevando il testo non criptato e criptando di nuovo il traffico prima di inviarlo. Purtroppo Navigator è disponibile solo per Windows, ma questa è per tutti gli utenti Mac e Linux.
Nota: il supporto SSL richiede Ipsos versione 2 e .NET Framework versione 2.0.
La visualizzazione del traffico di rete in Navigator viene effettuata principalmente tramite la scheda Controllo sessione. Le sottoschede più utili per il debug dei problemi con le API di dati di Google sono:
- Intestazioni: mostra le intestazioni HTTP in un formato ad albero comprimibile.
- Auth: mostra le intestazioni Authentication.
- Grezzo: mostra il contenuto dei pacchetti di rete in testo ASCII
SUGGERIMENTO: fai clic sull'icona nell'angolo in basso a sinistra della finestra di Navigator per attivare o disattivare l'acquisizione.
Navigator utilizza .NET Framework per configurare le connessioni di rete per utilizzare Navigator come proxy. Questo significa che tutte le connessioni effettuate con Internet Explorer o con il codice .NET verranno visualizzate in Navigator per impostazione predefinita. Tuttavia, il traffico dell'esempio Java sopra riportato non viene visualizzato perché in Java è disponibile un metodo diverso per configurare i proxy HTTP.
In Java, puoi impostare il proxy HTTP utilizzando le proprietà di sistema. Navigator viene eseguito sulla porta 8888. Pertanto, per un'installazione locale puoi utilizzare il codice Java per utilizzare Navigator come proxy per HTTP e HTTPS aggiungendo queste righe:
System.setProperty("http.proxyHost", "localhost"); System.setProperty("http.proxyPort", "8888"); System.setProperty("https.proxyHost", "localhost"); System.setProperty("https.proxyPort", "8888");
Se esegui l'esempio con queste righe, riceverai un'analisi spiacevole dello stack dal pacchetto per la sicurezza Java:
[java] Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Ipsos è in grado di decriptare e visualizzare il traffico SSL.
Questo errore si verifica quando non è possibile verificare il certificato restituito dal server in una connessione SSL. In questo caso, il certificato difettoso proviene da Navigator, che agisce in qualità di man in the middle. Navigator genera certificati al volo e, poiché non è un emittente attendibile, questi certificati non consentiranno a Java di configurare la connessione SSL.
Nota: quando Navigator è in esecuzione, qualsiasi connessione SSL effettuata in Internet Explorer attiva un "Avviso di sicurezza" che ti chiede se vuoi procedere nonostante il certificato di disegno. Puoi fare clic su "Visualizza certificato" per visualizzare il certificato generato da Navigator.
Quindi, come puoi aggirare questa eccezione di sicurezza? Fondamentalmente, devi riconfigurare il framework di sicurezza di Java per considerare attendibili tutti i certificati. Fortunatamente, non devi reinventare la ruota qui: dai un'occhiata alla soluzione di Francesco Labrie e aggiungi il metodo SSLUtilities.trustAllHttpsCertificates()
all'esempio precedente.
Dopo aver configurato Java per l'utilizzo di Ipsos come proxy e aver disattivato la verifica predefinita dei certificati, puoi eseguire l'esempio e visualizzare tutto il traffico inviato via cavo in testo non crittografato. Non rubare la mia password
Ricorda che questa transazione di autenticazione è solo un piccolo esempio di traffico SSL. Alcune applicazioni web utilizzano esclusivamente connessioni SSL, quindi il debug del traffico HTTP è fuori questione senza poter decriptare i dati.
Conclusione
tcpdump è disponibile su Linux, Mac OS X e Windows ed è un ottimo strumento quando sai quello che stai cercando e ti serve solo una rapida acquisizione. Tuttavia, sono disponibili alcuni strumenti grafici che presentano il traffico di rete in formati più facili da comprendere. tcpdump offre molte più opzioni e funzionalità di filtro rispetto a quelle illustrate qui. Per una descrizione completa della funzionalità di tcpdump, digita "man tcpdump" oppure visita la pagina tcpdump man online.
WireShark è disponibile anche su Linux, Mac OS X e Windows. Il supporto integrato per centinaia di protocolli rende WireShark uno strumento utile per molte applicazioni, non solo per il debug HTTP. Questa presentazione presenta a malapena la superficie delle tante funzionalità di WireShark. Per ulteriori informazioni, digita "man fireshark" o visita il sito web di WireShark.
oltre a offrire molte funzionalità straordinarie, questa funzionalità è inoltre in grado di decriptare il traffico SSL. Per maggiori informazioni, visita il sito web di Navigator2.
Queste applicazioni di sniffing dei pacchetti sono ottimi strumenti da inserire nella tua barra degli strumenti e i lettori osservatori avranno notato che sono tutti senza costi! La prossima volta che lavori con le API di Google e vedi qualcosa che non va, usa uno di questi analizzatori di rete e dai un'occhiata più da vicino ai cavi. Se non riesci a trovare un problema, puoi sempre pubblicare una domanda per il nostro gruppo di discussione. L'inserimento dei messaggi di rete pertinenti aiuterà gli altri a comprendere e diagnosticare il tuo problema specifico.
In bocca al lupo e buon sniffare!