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 ~§~
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 ~§~
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.