Finger é um protocolo e comando de troca de informação sobre utilizadores. Descrito no RFC 742, permite aceder à informação sobre utilizadores de uma máquina remota. O RFC usado para implementar este trabalho foi o RFC 1288, escrito em Dezembro de 1991. Este RFC actualiza os RFCs 1196, 1194 e 742.

De uma forma genérica o funcionamento do Finger resume-se a efectuar uma conexão à porta 79 do servidor, e a realizar um pedido. O servidor envia a resposta de acordo com os dados do pedido.

Em técnicas de hackers, o protocolo Finger é usado pra capturar senhas de todos os usários de um sistema para que se possa ter acesso usuário root ao sistema sem a necessidade de quebrar a senha por força bruta. Se o pedido for feito em DotIn no sistema, será retornado um erro provocando a quebra do sistema: eis aí o principal motivo de tal protocolo ser quase inexistente na maioria das redes e sua porta protegida diretamente pelo firewall.

Os dados enviados são em formato ASCII com os códigos de CR e LF no final.

O buffer que recebe os resultados do Finger pode ser imediatamente impresso na tela sem necessidade de tratamento, uma vez que os dados já se encontram formatados.

Exemplo de implementação do cliente Finger

editar
//  - 0 finger do ISEP
// para testar - server: gnu.org   users: karl, pot
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#define BUFLEN 30000

main (int argc, char *argv[])
{
  struct sockaddr_in target;
  struct hostent *he;
  struct servent *sp;
  int sock, nread;
  char *tmp, buffer[BUFLEN];
  char server[100], user[20];
  int i;

  if (argc==1) {
      puts ("Sintaxe do Programa: ifinger [user] server\n");
      printf ("Servername: ");	
      fgets (server, BUFLEN, stdin);
      tmp = index (server, '\n');
      *tmp = '\0';
      printf ("Username: (ENTER=todos) ");
      fgets (user, 20, stdin);
      }
 if (argc==3) {
      strcpy (server,argv[2]);
      strcpy (user, argv[1]);
      strcat (user,"\r\n");
      }
 if (argc==2) {
      strcpy (server,argv[1]);
      strcpy (user, "\r\n");
      }


 if ((he = gethostbyname (server)) == NULL)
   {
     perror ("ERRO: nao encontra server");
     exit (1);
   }

 if ((sock = socket (AF_INET, SOCK_STREAM, 0)) == -1)
   {
     perror ("ERRO: nao criou socket");
     exit (1);
   }

 if ((sp = getservbyname ("finger", "tcp")) == NULL)
   {
     perror ("ERRO: nao encontra porta");
     exit (1);
   }

 memset (&target, 0, sizeof (target));
 target.sin_family = AF_INET;
//  target.sin_port = 79;
 target.sin_port = sp->s_port;
 target.sin_addr = *((struct in_addr *) he->h_addr);

 if (connect (sock, (struct sockaddr *) &target, sizeof (target)) < 0)
   {
     perror ("ERRO: na conexao");
     exit (1);
   }

 nread = strlen (user);

 nread = write (sock, user, nread);	
 nread = read (sock, buffer, BUFLEN);	

 printf ("Resultado: \n\n %s", buffer);	

 close (sock);
 exit(0);
}

Ver Também

editar

📚 Artikel Terkait di Wikipedia

RC4

int confirm; printf("Escreva a Frase a ser Criptografada:"); scanf("%[^\n]%*c", entrada); tamanho_entrada=strlen((char*)entrada); printf("\nChave:");

Torre de Hanói

printf("Mova o disco %d do pino %c para o pino %c%n", n, inicial, finalPino); } else { hanoi(n - 1, inicial, auxiliar, finalPino); System.out.printf("Mova

Time.h

CLOCKS_PER_SEC char *asctime(const struct tm* tmptr) Converte tm para uma string no formato "Www Mmm dd hh:mm:ss yyyy", onde Www é o dia da semana, Mmm o mês

Scanf

caracteres de acordo com um formato pré determinado. Está presente também em outras linguagens de programação como PHP e C++. printf «scanf(3) - Linux man page»

Zig (linguagem de programação)

}); pub fn main() void { _ = std.printf("Método 1: Código C em Zig!\n"); // Requer libc (nativo do sistema) _ = c.printf("Método 2: Código C em Zig!\n");

Internacionalização (informática)

(underline), veja por exemplo o código em C: printf("My name is %s.", myname); é escrito assim: printf(_("My name is %s."), myname); em outras linguagens

GNU Core Utilities

versão leve do finger protocol printenv Imprime as variáveis do ambiente printf Formata e imprime dados pwd Imprime o diretório de trabalho atual readlink Mostra

Free Pascal

rstconv: conversor de arquivos .rst (que contêm strings usadas como recursos) criados pelo compilador para formato GNU gettext (outros ainda estão por vir).