Vamos falar sobre sockets galera, que são programas que permitem a comunicação,
interligação e troca de dados entre aplicações, conhecido com cliente e Servidor.

No Linux usando GCC.

Sockets TCP e UDP

TCP = SOCK_STREAM

UDP = SOCK_DGRAM

Headers básicos para se trabalhar com sockets.

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

Deixe seu header mais completo e não enfrente problemas:

#include <string.h>
#include <errno.h>
#include <resolv.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <netdb.h> / * conversor parágrafo IP * /

Famílias usadas.

AF_INET – ARPA protocolos de Internet
AF_UNIX – UNIX INTERNET PROTOCOLOS
AF_ISSO – ISO PROTOCOLOS
AF_NS – XEROX NETWORK SYSTEM PROTOCOLS

Protocolos.

0 – IP – INTERNET PROTOCOLO
1 – ICMP – Internet Control Message Protocol
2 – IGMP – Internet Group Multicast Protocol
3 – GGP – GATEWAY-Gateway Protocol
6 – TCP – Transmission Control PROTOCOLO
12 – PUP – PARC protocolo pacote universal
17 – UDP – USER DATAGRAMA PROTOCOL
255 RAW – RAW interface IP

Definindo socket,destino,porta
#define PORT 8080 / * porta Definida * /
int serversock; / * declarando socket * /
struct sockaddr_in Destino; / * Destino  * /

e_socket = socket (AF_INET, SOCK_STREAM, 0); / * padrão, pode ser usado de + formas * /

if (serversock <0) {
perror (“Erro”);
exit (1);} / * cria Condição no caso de erro de soquete * /

Referenciando.

bzero (& Destino, sizeof (Destino)); / * monta o endereço ​​* /
destino.sin_family = AF_INET; / * Família AF_INET de Destino * /
destino.sin_port = htons (PORT); / * Referência a porta setada no começo * /
destino.sin_addr.s_addr = INADDR_ANY; / * usa o endereço destino * /

Verificando Socket com condição.

if (bind (serversock, (struct sockaddr*)&Destino, sizeof (Destino))) {
perror (“Erro no bind”); / * verifica o bind * /
exit (1);
}

Colocando socket em escuta.

if (listen (serversock, 20)) {
perror (“Erro no listen listen”);
exit (1);
{

Estrutura Conversão Host para IP

char *url,buff[MAXSIZE],sBuff[MAXSIZE],host[MAX],page[MAX],enter[MAX];
char getpage[MAX]=”GET /”; /*usar netdb para converter host para ip*/
struct hostent *ip;

Extraindo DNS e pagina.

sscanf(enter, “http://%99[^/]/%99[^\n]”, host, page);
printf(“DNS = \”%s\”\n”, host);
printf(“Page = \”%s\”\n\n”, page);

Aguardando, aceitando e printando Conexão na Tela.

int clientsock;
struct sockaddr_in client_addr;
int addrlen = sizeof (client_addr);
clientsock = accept (serversock, (struct sockaddr*)&client_addr, &addrlen);
printf(“client% s:% d conectado \ n”, inet_ntoa (client_addr.sin_addr), ntohs (client_addr.sin_port));

Guardando IP

char ip[32];
fgets(ip, sizeof(ip), stdin);
ip[strlen(ip)-1] = ‘\0’;

Aumentando Conexões com 10 clientes .

struct sockaddr_in network,local;
int sock,newSock,strucsize;

listen (sock, 10);
for(;;) {
if((newSock = accept (sock, (struct sockaddr *)&network, &strucsize))==1) {
perror(“aceito”);
exit(1);
}

Trabalhando com o UDP

sd=socket(AF_INET, SOCK_DGRAM, 0); /*criando o socket UDP,protocolo ja citado DGRAM*/
servAddr.sin_addr.s_addr = hton(INADDR_ANY); /*usando INADDR_ANY*/

Função Connect.

int connect(socket,(struct sockaddr * )&destino, sizeof(destino));

Exemplo abaixo de servidor web feito em c.

servidorweb

Abraço a todos

 

 

 

Rodolfo

Rodolfo

Rodolfo Cr é Engenheiro da Computação, especialista em Pentester em aplicações e Proteção em Servidores Linux e programador em algumas Linguagens. Membro da Roothc com intuito de divulgar e acrescentar conhecimento na área da computação com foco em segurança da informação.
Rodolfo

Latest posts by Rodolfo (see all)