RES: [FUGSPBR] Script - ping TCP

Thiago Pinto Damas thiago em vetorialnet.com.br
Qui Jun 14 22:18:43 BRT 2001


	Ta, fiz um programinha que passando como argumentos a maquina, a
porta e o timeout, checa se a maquina/servico esta OK.
	Se quiseres, faz alguma modificacao para ler de algum arquivo os
argumentos, e realizar as operacoes necessarias caso a maquina esta DOWN.

Thiago Pinto Damas - SysAdmin
----------------------------------------------------------------
http://www.vetorialnet.com.br		http://www.ecomp.furg.br
thiago em vetorialnet.com.br		thiago em ecomp.furg.br

On Wed, 13 Jun 2001, Daniel Santos wrote:

>
> > Faz um programinha com sockets, se retornar ACK ou RESET, a
> > maquina esta OK (ACK -> porta aberta, RESET -> porta fechada).
> > 	Faz em C, e faz o programa principal ler a partir de algum arquivo
> > e testar um por um.
>
>  Assim vc me complica, hehehhe. Programo razoalmente bem, conheço bastante
> lógica de programação mas infelizemente, linguagem C e Perl estã fora dos meus
> conhecimentos. Agora se vc tiver um script semelhante, eu posso tranquilamente
> trabalhar em cima disso e aprender....
>
>  []'s
>
> --
> Atenciosamente;
>
> Daniel Santos
> Ass. de Informática
> ----
> Para sair da lista envie um e-mail para majordomo em fugspbr.org
> com as palavras "unsubscribe fugspbr" no corpo da mensagem.
>
-------------- Próxima Parte ----------
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <signal.h>
#include <unistd.h>
#include <netdb.h>
#include <stdlib.h>

int client_fd;
int porta;
char maquina[128];

void se_passar_o_tempo(int signal){
  printf("Host %s esta DOWN\n", maquina);
  printf("Ou a porta %d esta fechada\n", porta);
  close(client_fd);
  exit(0);
}

int main(int argc, char **argv){
   struct sockaddr_in client_address;
   struct hostent *host;
   
   if (argc!=4){
     printf("Uso: %s <maquina> <porta> <timeout em segundos>\n",argv[0]);
     exit(1);
   }
   
   host = gethostbyname(argv[1]);
   if(host == NULL){
     printf("Hostname invalido\n");
     exit(1);
   }
   strcpy(maquina, argv[1]);
   porta = atoi(argv[2]);

   client_fd = socket(AF_INET, SOCK_STREAM, 0);
   
   client_address.sin_family = AF_INET;
   client_address.sin_addr = *(struct in_addr *)*host->h_addr_list;
   client_address.sin_port = htons(porta);
   
   if (atoi(argv[3]) > 120) {
     printf("timeout invalido -> timeout precisa ser menor do que 120 segundos\n");
     close(client_fd);
     exit(1);
   } 
   
   signal(SIGALRM, se_passar_o_tempo);
   alarm(atoi(argv[3]));
   if (connect(client_fd, (struct sockaddr *)&client_address, sizeof(client_address)) == -1) {
     perror("ERRO");
     close(client_fd);
     exit(1);
   }
   
   printf("Host %s esta UP\n", maquina);
   printf("Porta %d esta aberta\n",porta);
   close(client_fd);
   exit(0);
 }


Mais detalhes sobre a lista de discussão freebsd