Enviado em 29/04/2018 - 17:44h
Olá pessoal, estou desenvolvendo um proxy bem simples com C++ usando a biblioteca socket
int main(int argc, char* argv[]){
// Verifica os parametros
if ( argc < 3 ){
std::cout << "Especifique uma porta!" << std::endl;
std::cout << "Exemplo: sckt -p 80" << std::endl;
return 1;
}
// Pega a porta
int porta;
for (int i = 0; i < argc; ++i){
if ( !strncmp(argv[i],"-p",2) ){
porta = atoi(argv[i+1]);
break;
}
}
if (porta > 0){
int serversocket, clientsocks;
int opt = 1;
struct sockaddr_in address;
// Inicializa um socket
serversocket = socket(AF_INET,SOCK_STREAM,0);
// Configura o socket
setsockopt(serversocket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
// Endereço para bind
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(porta);
int address_len = sizeof(address);
// Inicializa o bind
if ( (bind(serversocket,(sockaddr*)&address,sizeof(address))) < 0 ) {
std::cout << "Erro ao abrir a porta: " << porta << std::endl;
return 1;
}
// Modo Ativo
listen(serversocket,1);
// Loop de recebimento de clientes
int clientes = 1;
std::cout << "Sucesso!" << std::endl;
std::cout << "Porta aberta: " << porta << std::endl;
while (true){
if ( (clientsocks = accept(serversocket,(sockaddr *)&address, (socklen_t*)&address_len)) > 0 ){
// Aqui trato as requisições do cliente
// Sempre uso close no FD do cliente
// Debugando...
std::cout << "Clientes: " << clientes << std::endl;
clientes++;
}
else{
// Debugando....
std::cout << "Cliente ERRO: " << clientsocks << std::endl;
break;
}
}
}
else{
std::cout << "Porta Invalida!" << std::endl;
std::cout << "Especifique uma porta!" << std::endl;
std::cout << "Exemplo: sckt -p 80" << std::endl;
return 0;
}
return 0;
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Thunderbird no Debian não importa o zip (1)
HD externo modelo SDK SSD com 15,26 TiB aparece como unidade não aloc... (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta