[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