Tentativa fracasada de fazer um programa como telnet e o netcat [RESOLVIDO]

1. Tentativa fracasada de fazer um programa como telnet e o netcat [RESOLVIDO]

samuel
samoliver1914

(usa Lubuntu)

Enviado em 03/04/2015 - 16:53h

Boa tarde, estou tentado fazer um programa como telnet e o netcat, mas so a parte de envia e receber texto, mas nao estou conseguido fazer de jeito nenhum, o codigo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

// blibioteca para socket Tcp
#include "SocketTcp.h"

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <fcntl.h>
#include <sys/time.h>
#include <sys/types.h>

// e deu um progama que eu fis
// esta fucinado, pega perfeitamente com o nc ou telnet
#define PORT 20108
#define IP "127.0.0.1"
#define MAX_BUFFER 2000
#define PASS "EXIT"

int main(int argc, char const *argv[]){

// estrutura que representa um socket
Socket s;
char bufferOUT[100];
char bufferIN[MAX_BUFFER];
fd_set in;
struct timeval tv;
int sso, retval;

// configura o todas estruturas e verifica erros
if(setSocket(&s, IP, PORT) == false){
perror("setSocket");
return 1;
}
// chama o connect e verifica erros
if(getConecao(&s) == false){
perror("getConecao");
return 1;
}

FD_ZERO(&in);
FD_SET(0, &in);
FD_SET(getFd(s), &in);

sso = fcntl(getFd(s), F_GETFL, 0);
fcntl(getFd(s), F_SETFL, sso | O_NONBLOCK);

tv.tv_sec = 1;
tv.tv_usec = 0;

while(true){

int rr = select(getFd(s)+1, &in, NULL, NULL, &tv);
printf("Test 1\n");

if(rr < 0){
perror("select");
break;
}
if(rr == 0){
tv.tv_sec = 1;
tv.tv_usec = 0;
}
// Aqui esta fucionado
if(rr && FD_ISSET(getFd(s), &in) ){
printf("Test 3\n");
int r;

memset(bufferIN, 0, MAX_BUFFER);
r = read(getFd(s), bufferIN, MAX_BUFFER);
if(r < 0){
perror("read");
break;
}
if(r == 0){
printf("Connection closed by the remote end\n");
break;
}

bufferIN[r] = '\0';
printf("recebido: %s\n",bufferIN);
fflush(0);

}
// Nao esta entrando aqui
if(rr && FD_ISSET(0, &in) ){
printf("Test 2\n");
int r;
memset(bufferOUT, 0, 100);
r = read(0, bufferOUT, 100);
if(r < 0){
perror("read");
break;
}

printf("enviado: %s\n", bufferOUT);
write(getFd(s), bufferOUT, r);
}

}

closeSocket(&s);
printf("Em Fim!!!\n");

return 0;
}


Como da pra ver ainda sou meio iniciante, mas realmente estou precisando fazer um programa desse.


  


2. Re: Tentativa fracasada de fazer um programa como telnet e o netcat [RESOLVIDO]

Carlos APC
Carlos_Cunha

(usa Linux Mint)

Enviado em 03/04/2015 - 20:34h

Não sei a sua necessidade, mas seria mais facil faze em SHELL do que em C. Ai depende de como seria a utilidade, etc...

#-------------------------------------------------------------------------------------#

"Linux é algo que me fez ter Gosto pela Informática, se tornou um Vicio" - Carlos A. P. Cunha


3. Re: Tentativa fracasada de fazer um programa como telnet e o netcat [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/04/2015 - 00:02h

Ainda não olhei o código todo. Mas uma coisa que eu pude ver é que você não está usando FD_SET() dentro do loop. Deveria, uma vez que select() vai desligar os bits referentes aos descritores que não tiverem eventos.


4. Tentativa fracasada de fazer um programa como telnet e o netcat

samuel
samoliver1914

(usa Lubuntu)

Enviado em 05/04/2015 - 18:01h

Esse programa e para ser uma das funcionalidades de um programa cliente, em que o servido tem uma opcao de shell remoto, e como o programa servido vai ter varias funcionalidades nao da pra usa o netcat ou telnet.

E realmente era porque o FD_SET nao estava no loop, nos tutorias que eu vi sobre a funcao select, nao disseram nada sobre isso e meu ingles ainda nao e bom o suficiente para ler as man pages, muito obrigado nunca ia adivinha que erra isso.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts