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