PDA

View Full Version : [script] "test" di connessione


Miky Mouse
08-11-2005, 18:41
mi serve un programmino (anche uno script va bene) che mi faccia il test della connessione ogni tot minuti.

-faccio un ping a un sito che è sempre up, se i pacchetti tornano ok, altrimenti faccio il reboot della connessione.

adesso mi servirebbe di sapere come si fa il controllo degli errori negli script....sempre se è possibile....

Fenomeno85
08-11-2005, 18:44
mmm penso che esista una funzione che ti permette di vedere se sei connesso o meno. Non so ma penso che alla fine sia possibile accedere allo stack del tcp/ip o sbaglio?
E se si prova a fare un lavoro del tipo connettersi a un nodo esterno? provare a vedere se si riesce a connettere a un dns? :stordita:

~§~ Sempre E Solo Lei ~§~

Miky Mouse
08-11-2005, 18:50
mmm penso che esista una funzione che ti permette di vedere se sei connesso o meno.

se la trovi fai un fischio ;)

però boh... possibile che non ci sia un modo per far restituire qualche cosa al ping in caso di non ritorno dei pacchetti??

Miky Mouse
08-11-2005, 18:51
E se si prova a fare un lavoro del tipo connettersi a un nodo esterno? provare a vedere se si riesce a connettere a un dns? :stordita:

ho comunque bisogno di un ritorno dal ping.... altrimenti lo script non sa se il ping è a buon fine ;)

o no?

Fenomeno85
08-11-2005, 18:58
ho comunque bisogno di un ritorno dal ping.... altrimenti lo script non sa se il ping è a buon fine ;)

o no?

Te cerchi di connetterti sul nodo, se non ci riesci implica che qualcosa non va :D ... ci dovrebbe essere tranquillamente l'errore.
Deve funzionare anche semplicemente facendo uso della connect in c.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-11-2005, 19:02
se la trovi fai un fischio ;)

però boh... possibile che non ci sia un modo per far restituire qualche cosa al ping in caso di non ritorno dei pacchetti??

no il ping non ti serve a nulla, se vuoi puoi fare un redirect del comando e analizzarti il file.
Ma cmq usa connect e fai il tutto.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-11-2005, 19:13
va che ti ho scritto:


#include "stdafx.h"


#define PROTOPORT 6000

int main (void){
int sd; /* descrittore */
int err;
struct sockaddr_in sad; /* informazioni server */
struct sockaddr_in cad; /* informazioni client */
int mio_addr_len=sizeof(cad);
int error;

WSADATA wsaData;
WSAStartup (0x0101,&wsaData);

memset((char*)&sad,0,sizeof(sad));

/* informazioni server */
sad.sin_family = AF_INET;
sad.sin_port = htons ((u_short)PROTOPORT);
sad.sin_addr.s_addr = inet_addr("217.141.250.206"); // DNS ALICE

/* apertura socket */
sd=socket(PF_INET,SOCK_STREAM,0);
if (sd < 0)printf ("\n\nError to create socket.");
else printf ("\nCreate socket.");
err = connect(sd,(struct sockaddr *)&sad, sizeof(sad));
if (err <0)
printf ("\nError to conncet at DNS");
else
printf ("\nConnect to DNS");
close(sd);
system ("PAUSE");
return (0);
}


funziona :D

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-11-2005, 19:14
non posso provare a vedere se ti richiama direttamente l'attivazione della linea dato che ho un router ste cose non posso provarle ;)

~§~ Sempre E Solo Lei ~§~

Miky Mouse
08-11-2005, 19:22
va che ti ho scritto:

funziona :D

~§~ Sempre E Solo Lei ~§~


ti invidio non ce l'avrei mai fatta da solo.... ma c'è un manuale di c che tratta in modo approfondito di reti??

cmq devo trovare la stdafx.h perche il mio compilatore non ne vuole sapere... :mc:

Fenomeno85
08-11-2005, 19:28
ti invidio non ce l'avrei mai fatta da solo.... ma c'è un manuale di c che tratta in modo approfondito di reti??

cmq devo trovare la stdafx.h perche il mio compilatore non ne vuole sapere... :mc:

no scusa è che io uso vc 2003 e crea progetti :D .. aspe al posto di quello metti le librerie direttamente ;)


#include <iostream>
#include <tchar.h>
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <stdio.h>
#define close closesocket


di manuali ne trovi a iosa .. guarda che anche su msdn c'è tutto ;) molto approfondito perchè ti spiega se non erro anche l'implementazioni di stack non tcp

ah devi linkare nel compilatore anche la libreria ws2_32.lib

per curiosità se sei disconnesso dalla rete parte anche la connessione? :D .. se si sarebbe bello aggirare la connessione automatica :D

~§~ Sempre E Solo Lei ~§~

Miky Mouse
08-11-2005, 19:35
no ormai ho sconfinato nello sconosciuto..... devo studiare parecchio per capire stò programma... :doh: :doh:

cmq tanto per la cronaca non mi riconosce il iostream

Miky Mouse
08-11-2005, 20:19
no scusa è che io uso vc 2003 e crea progetti :D .. aspe al posto di quello metti le librerie direttamente ;)


#include <iostream>
#include <tchar.h>
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <stdio.h>
#define close closesocket


di manuali ne trovi a iosa .. guarda che anche su msdn c'è tutto ;) molto approfondito perchè ti spiega se non erro anche l'implementazioni di stack non tcp

ah devi linkare nel compilatore anche la libreria ws2_32.lib

per curiosità se sei disconnesso dalla rete parte anche la connessione? :D .. se si sarebbe bello aggirare la connessione automatica :D

~§~ Sempre E Solo Lei ~§~


no niente non ne vuole sapere di compilarlo.... ma tu sei arrivato a creare l'eseguibile? casomai se non è troppo disturbo me lo mandi per email che faccio un po' di test? :D

Fenomeno85
09-11-2005, 09:43
no niente non ne vuole sapere di compilarlo.... ma tu sei arrivato a creare l'eseguibile? casomai se non è troppo disturbo me lo mandi per email che faccio un po' di test? :D

che problemi ti da? ... va be quella libreria che ti da problemi puoi anche eliminarla tanto non serve ;)

hai linkato la libreria che ti ho detto?

~§~ Sempre E Solo Lei ~§~

kk3z
09-11-2005, 12:02
Un'altra soluzione (che non ho provato :rolleyes: ) è quella di usare una delle funzioni di wininet tipo IinternetGetConnectedState (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetgetconnectedstate.asp)

Miky Mouse
09-11-2005, 13:42
che problemi ti da? ... va be quella libreria che ti da problemi puoi anche eliminarla tanto non serve ;)

hai linkato la libreria che ti ho detto?

~§~ Sempre E Solo Lei ~§~


è da ieri che stò facendo una full immersion per capire qualcosa della winsock... e solo ora comincio a capire un po'.... questo è il problema che mi dava, che non capivo nulla del programma :D tra un po' cercherò di ricompilare il prog... ma prima vorrei capirlo a fondo :muro:

ma per curiosità: quello è c++ vero?

e poi mi potresti spiegare queste righe?

#define PROTOPORT 6000

memset((char*)&sad,0,sizeof(sad));

sd=socket(PF_INET,SOCK_STREAM,0);

sd è una variabile a cui associ un valore di ritorno del socket? a che ti serve senno' la condizione <0 dopo?


ammetto di essere un ignorante assurdo in materia... ma ho tanta voglia di imparare :stordita:

Fenomeno85
09-11-2005, 19:24
è da ieri che stò facendo una full immersion per capire qualcosa della winsock... e solo ora comincio a capire un po'.... questo è il problema che mi dava, che non capivo nulla del programma :D tra un po' cercherò di ricompilare il prog... ma prima vorrei capirlo a fondo :muro:

ma per curiosità: quello è c++ vero?

e poi mi potresti spiegare queste righe?

#define PROTOPORT 6000

memset((char*)&sad,0,sizeof(sad));

sd=socket(PF_INET,SOCK_STREAM,0);

sd è una variabile a cui associ un valore di ritorno del socket? a che ti serve senno' la condizione <0 dopo?


ammetto di essere un ignorante assurdo in materia... ma ho tanta voglia di imparare :stordita:ù

no c.

Sd è il descrittore del socket se è <0 significa che c'è stato errore.

PROTOPORT è la porta dove vuoi andare .. la puoi chiamare anche ciccio ;)

memset se non lo metti funziona lo stesso ma è meglio metterlo ;)

~§~ Sempre E Solo Lei ~§~

Miky Mouse
13-11-2005, 12:54
come non detto funziona tutto adesso ;)


almeno credo adesso mi do un po' ai test :D

Miky Mouse
13-11-2005, 13:45
niente mi ero sbagliato come lo avevo fatto no andava bene.......

Fenomeno85
13-11-2005, 16:43
stavo ripensando ... e cmq per correttezza ci dobbiamo attaccare in udp alla porta 53.

Cmq sul mio sito ho messo la versione con le api ;) adesso aggiorno l'esempio che ti ho postato con i socket provando a utilizzare in udp.

~§~ Sempre E Solo Lei ~§~

Miky Mouse
13-11-2005, 16:54
stavo ripensando ... e cmq per correttezza ci dobbiamo attaccare in udp alla porta 53.

Cmq sul mio sito ho messo la versione con le api ;) adesso aggiorno l'esempio che ti ho postato con i socket provando a utilizzare in udp.

~§~ Sempre E Solo Lei ~§~


che vuol dire "per correttezza"? O.o

cmq boh appena posso provo a ricompilare con il visual c++ perche questo continua a darmi errori stranissimi e credo che non dipenda dal listato ma dal compilatore che sclera. :mc:

Fenomeno85
13-11-2005, 17:16
cmq anche connettendosi con tpc funziona ... il tuo problema è strano dato che il codice funziona. Cmq ti rimetto il codice:


#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#define close closesocket
#define PORT 53
#define IP "217.141.250.206"

int main (void){
int sd; /* descrittore */
int err;
struct sockaddr_in sad; /* informazioni server */
struct sockaddr_in cad; /* informazioni client */
int mio_addr_len=sizeof(cad);
int error;

WSADATA wsaData;
WSAStartup (0x0101,&wsaData);

memset((char*)&sad,0,sizeof(sad));

/* informazioni server */
sad.sin_family = AF_INET;
sad.sin_port = htons ((u_short)PORT);
sad.sin_addr.s_addr = inet_addr("217.141.250.206"); // DNS ALICE

/* apertura socket */
sd=socket(PF_INET,SOCK_STREAM,0);
if (sd < 0)printf ("\n\nError to create socket.");
else printf ("\nCreate socket.");
err = connect(sd,(struct sockaddr *)&sad, sizeof(sad));
if (err <0)
printf ("\nError to conncet at DNS");
else
printf ("\nConnect to DNS");
close(sd);
system ("PAUSE");
return (0);
}


~§~ Sempre E Solo Lei ~§~

Fenomeno85
13-11-2005, 17:17
che vuol dire "per correttezza"? O.o

cmq boh appena posso provo a ricompilare con il visual c++ perche questo continua a darmi errori stranissimi e credo che non dipenda dal listato ma dal compilatore che sclera. :mc:

perchè i dns lavorano da quanto ne so con udp non con tpc.

~§~ Sempre E Solo Lei ~§~

Miky Mouse
13-11-2005, 19:26
niente sempre lo stesso errore. cmq mi tocca di definire un sacco di altra roba in mezzo ai #define. per qui alla fine l'inizio del prog è così:


#include <iostream.h>
#include <tchar.h>
#include <windows.h>
#include <winsock.h>
#include <assert.h>
#include <stdio.h>

#define close
#define closesocket
#define PORT 53
#define IP "217.141.250.206"
#define htons
#define connect
#define socket
#define inet_addr
#define WSAStartup


potrebbe essere questo il motivo per cui mi da quell'errore? che siano "troppi" #define?

Fenomeno85
16-11-2005, 09:05
sbagli 1 a fare i define ... ma oltre a questo quelle son chiamate a funzioni che sono già dichiarate.
Te non linki la lib che ti ho detto la ws2_32.lib.

~§~ Sempre E Solo Lei ~§~