Pular para o conteúdo

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.
C00L3R_ Cooler_
Hits: 123.614 Categoria: C/C++ Subcategoria: Rede
  • Indicar
  • Impressora
  • Denunciar

Introdução

Analisando a cena:

Por que estudar Sockets em C?

Todo programa num OS que tem contato externo, dentro ou fora da intranet, por meio de rede, usa socket. Internet usa socket para trabalhar desde o DNS até seu querido MSN e Skype. SGBD como MySQL usam socket para comunicação envio de queries, acessos remotos como SSH. Ou seja, socket está presente em tudo...

Obs.: Não nos responsabilizamos pelo mau uso das informações aqui contidas. Todo material e exemplos descritos nesse tutorial possuem somente propósitos educacionais.

Capítulos analisados por m0nad e syn_ack, agradecimento especial para eles.

Índice

  • Introdução
  • Explanação ao TCP/IP
  • BSD Sockets
  • Funções read(),send() e exemplo cliente HTTP
  • Funções listen(),Bind(),accept() e servidor http exemplo
  • Na prática fazendo um FUZZER TCP
  • Servidor e cliente com fork
  • Servidor de comandos e Scanner de portas
  • Simple Socket Library
  • Explanação ao UDP e exemplo de Servidor e cliente
  • Exemplo UDP Flood
  • Portabilidade com Windows, exemplo um Whois
  • Conclusão
  • Bibliografia
  • Agradecimentos
  • Sources externas

Introdução

Vamos ver algo de sockets, coisas simples como port scan, floods UDP, mas nossa meta é algo mais como Fuzzer, cliente e servidor de HTTP, algumas libs como SSL, quanto a tarefas multiprocesso vou usar fork por ser mais popular no pessoal intermediário em C, pois pthreads é para usuários avançados, fora que pedi mais explicações.

Além disto tudo eu mostro soluções mais fáceis como uso de bibliotecas externas para fazer certas tarefas.

Requisito: sugiro que seja um programador iniciante em C ou intermediário, entenda redes ou pelo menos o mínimo sobre o mesmo para não ficar perdido.

Bom, se você usa Windows, antes de tentar seguir qualquer exemplo leia o capítulo sobre portabilidade.

O sistema operacional que testei os programas são GNU/Linux e FreeBSD. Do mais um bom editor de texto com syntax highlight como VIM e EMACS. Um GDB para depurar o código ou desbugar e já está bom.

   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

Usando OpenBSD como desktop

Buffer Overflow: Entendendo e explorando

Módulos de Web no Perl

Banco de dados orientados a documentos

Trabalhando com arquivos no Perl

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

Monitorando o consumo de banda com Bwbar

Controlando UPLOAD com o CBQ

O Modelo de Referência OSI

A poderosa nuvem: Intel® DevCloud com GPU Iris Xe Max!

#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.
#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

Entre na sua conta para comentar.