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;
}
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET
Como instalar o XFCE4-terminal na sua distribuição Linux e integrá-lo ao sistema
Como instalar o Tilix Terminal no Gnome e usá-lo como menu drop-down ao estilo Quake
Instalando Grub Customizer no Ubuntu 24.04
COMANDO PVCREATE NÃO ENCONTRADO (3)
Aviso! Spin do Fedora (versão lxde) com problemas no programa de insta... (2)
Microfone não está conectado no Ubuntu 22.04 (1)
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (43)