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;
}
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
crontab executar em tempos (1)
Formatando cartão de memoria que nao formata[AJUDA] (9)
Programa duplicado no "Abrir com" e na barra de pesquisa do ... (3)