[FUGSPBR] ping tcp

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


	na pressa mandei a versao beta :)
	ta ae a versao melhorada.

Thiago Pinto Damas - SysAdmin
----------------------------------------------------------------
http://www.vetorialnet.com.br		http://www.ecomp.furg.br
thiago em vetorialnet.com.br		thiago em ecomp.furg.br
-------------- 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>
#include <errno.h>

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

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) {
     if (errno == ECONNREFUSED) {
       printf("Host %s esta UP\n", maquina);
       printf("Porta %d esta fechada\n", porta);
     }
     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