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.525 ]

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


Conclusão



Caros leitores, passamos por STREAM e DGRAM, as socket mais usadas popularmente, além de ter uma torrente de exemplos neste "paper", também passei vários links de bibliotecas para facilitar certas tarefas, não deixe de estudá-las, pois estas bibliotecas mostradas fazem a diferença.

Eu sei que ficou faltando muito material como ICMP e RAW Sockets, mas vamos deixar isso para o próxima odisseia. Estude os manuais do seu sistema (man socket), aproveite que o sistema tem o código aberto caso use BSD, Linux, OpenSolaris para estudar os internals, converse no IRC com bons programadores, crie você mesmo seu caminho, em português você vai encontrar pouco material sobre o mesmo e se achar vai ser redundante.

Caso queira estudar raw sockets:
Este meu artigo original em formato HTML está em:
Caso queira baixar.

Bibliografia

Tcp/ip Illustrated, V.3 (em inglês) (1996)
ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES
STEVENS, W. RICHARD
ADDISON WESLEY-USA
INFORMÁTICA - REDES

Unix Network Programming, V.2 (em inglês) (1998)
STEVENS, W. RICHARD
PRENTICE HALL
INFORMATICA-REDES

Programaçao De Rede Unix, V.1 (em português) (2005)
STEVENS, W. RICHARD / FENNER, BILL / RUDOFF, ANDREW
BOOKMAN COMPANHIA ED
INFORMATICA-REDES URLs:

Agradecimentos

Pessoal do "BugSec", grupo que faço parte:
  • m0nad, grande amigo e por ter me ajudado a escrever a parte de TCP e ter feito um scanner de portas para o paper e sempre estar me ajudando no estudo da linguagem C.
  • Mlk_, grande amigo, me ajuda sempre, domina muito SQL injection, me dá dicas para xavecar mulheres bonitas.
  • IAK, grande amigo, me ajuda sempre, mestre do C/C++.

Diversos:
  • voidpointer, syn_ack, edenc, ecl, isis, Cs0, muzgo, zepplin, nibbles
  • coracaodeleao, 6_Bl4ck9_f0x6, d3lf0, f0kerDebug,Joey, Otacon_x86, BackBone e deadside.
  • Pessoal do BotecoUnix.com.br e companhia.
  • Pessoal dos canais #c4ll, #c-br, #openbsd-br, #gentoo-br da freenode

Página anterior    

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

Trabalhando com arquivos no Perl

Buffer Overflow: Entendendo e explorando

Apache + PHP + MySQL + ftpd no OpenBSD

Ponteiros - Saindo de Pesadelos

Usando o PF - Packet Filter

Leitura recomendada

O Modelo de Referência OSI

Controlando UPLOAD com o CBQ

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

Monitorando o consumo de banda com Bwbar

Ensaio acerca de bibliotecas de código aberto para abstração de acesso a banco de dados em linguagem C++

  
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