Pular para o conteúdo

Exemplo Básico de Sockets em C

Pequeno script mostra um simples esquema de esboço de verificação se uma porta está aberta para conexão ou nao.

Principio de um port scan :) esse pega apenas as 30 primeiras portas ... apenas como Proof of concept. Enjoy
Anderson L Tamborim y2h4ck
Hits: 29.475 Categoria: C/C++ Subcategoria: Rede
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Pequeno script mostra um simples esquema de esboço de verificação se uma porta está aberta para conexão ou nao.

Principio de um port scan :) esse pega apenas as 30 primeiras portas ... apenas como Proof of concept. Enjoy
Download sock1.c Enviar nova versão

Versões atualizadas deste script

Felipe S. Araujo

Versão 2 enviada por Felipe S. Araujo em 15/11/2010

Changelog: Apenas aprimorei a impressão das portas fechadas, mas se você achar que o scan deve apenas listar as portas abertas, comente a linha:

printf("A porta %d esta aberta\n",porta);

Download 1289838851.sock1.c

Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/signal.h>
#include <errno.h>
#include <netdb.h>

#define PORTA_INICIO 1

main(int argc, char *argv[])
{
char host[15];
int porta, portas, i , spawnsocket, delay, ligacao;
struct sockaddr_in alvo;
struct hostent *he;
struct servent *servicos;

   if ( argc == 1 )
   {   
      fprintf(stderr,"RootSec Scan V0.1\n");
                fprintf(stderr,"usar: %s <host>\n",argv[0]);
      exit(0);
   }
   if ( argc > 1 )
   {   
      porta = PORTA_INICIO;
   }
   if (argc  > 2 )
   {
       porta = atoi (argv[2]);
   }
he = gethostbyname ( argv[1] );
if ( he == NULL ) {
printf("Host Nao encontrado");
exit(-1);
}

for(porta=1;porta<=30;porta++)
{

spawnsocket = socket( AF_INET, SOCK_STREAM, 0);

if ( spawnsocket < 0)
   {
   perror("Socket");
   }

alvo.sin_family = he->h_addrtype;
alvo.sin_port = htons(porta);
alvo.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(alvo.sin_zero),8);

ligacao = connect ( spawnsocket, (struct sockaddr *) &alvo,
sizeof(alvo));

if ( ligacao == -1 )
{   
   perror("Porta esta fechada\n");
}

else
{

printf("A porta %d esta aberta\n",porta);
}
close(spawnsocket);
}
}

Calcular Broadcast e IPs disponíveis

Ruby

Servidor em C via UDP

Script de smbstatus

Acha IP

#1 Comentário enviado por birilo em 13/05/2004 - 11:18h
Sabe oq seria interessante postar aqui.
Um exemplo básico de comunicação entre dois programas em C (servidor - cliente), para a troca de strings.

To querendo aprender a fazer isso faz um tempo, mas não consigo.

Se souber de alguma coisa, manda um toque aqui no vivaolinux.

Abraços
#2 Comentário enviado por jllucca em 13/05/2004 - 19:35h
Eu tinha visto um exemplo disso quando tava dando uma olhada em sockets se não estou enganado no google esta cheio de exemplos de troca de mensagens entre cliente-servidor é só dar uma procurada. :)

[]'s
#3 Comentário enviado por caal em 09/10/2004 - 14:00h
Uma outra coisa interessante seria um exemplo de um mini servidor de e-mail em C, a exemplo do mini apache que já foi postado aqui.
Se alguem tiver um e puder disponibilizar para mim dar uma olhada, fico muito agradecido.

Valeu.....
T+

#4 Comentário enviado por andrezc em 15/11/2010 - 14:21h
Bacana, Anderson. Mais eu acho que ficaria mais bacana se você comentasse à linha de erro, caso a porta esteja fechada:

-----------------------------------------
if ( ligacao == -1 )
{
//perror("Porta esta fechada\n");
}
-----------------------------------------

Ou caso queira mostrar as portas fechadas, ficaria muito mais bonito usar algo como:

-----------------------------------------
if ( ligacao == -1 )
{
printf("A porta %d esta fechada.\n",porta);
}

-----------------------------------------

Um abraço.

Contribuir com comentário

Entre na sua conta para comentar.