Pessoal, preciso entregar um trabalho amanhã na universidade, o trabalho em sí é muito maior do que esta passagem, pensei que não teria problemas, mas não está funcionando...
Eu tenho um cliente e um servidor em Java, no meio desta comunicação, eu preciso colocar um "man-in-the-middle" em C...
Para isso estou usando o seguinte código:
Em C:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#define PORT 31111
#define MAXBUF 1000
#define PORTC 41111
#define SERVER_ADDR "127.0.0.1"
int main(int argc, char **argv){
int s, client_s, len, port;
struct sockaddr_in self;
struct sockaddr_in client;
int addrlen = sizeof(client);
char msg_write[MAXBUF];
char msg_read[MAXBUF];
port = PORT;
if (argc == 2) {
port = atoi(argv[1]);
}
/*---Open socket for streaming---*/
if ( (s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
perror("Socket");
exit(errno);
}
/*---Initialize server address/port struct---*/
bzero(&self, sizeof(self));
self.sin_family = AF_INET;
self.sin_port = htons(port);
self.sin_addr.s_addr = INADDR_ANY;
/*---Assign a port number to the socket---*/
if ( bind(s, (struct sockaddr*)&self, sizeof(self)) != 0 ) {
perror("socket--bind");
exit(errno);
}
/*---Make it a "listening socket"---*/
if ( listen(s, 1) != 0 ) {
perror("socket--listen");
exit(errno);
}
/*---accept a connection ---*/
printf ("Server C accpeting connections!\n");
client_s = accept(s, (struct sockaddr*)&client, &addrlen);
printf ("%s:%d connected\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
read (client_s, msg_read, MAXBUF);
len = strlen(msg_read) - 1;
if (msg_read[len] == '\n'){
msg_read[len] = '';
}
printf ("Mensagem do cliente: %d\n", msg_read);
//envia mensagem recebida ao servidor em java
int sC, n, buflen, server_port;
struct sockaddr_in dest;
msg_write[MAXBUF];
char server_addr[50];
server_port = PORTC;
strcpy (server_addr, SERVER_ADDR);
/*---Open socket for streaming---*/
if ( (sC = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
perror("Socket");
exit(errno);
}
/*---Initialize server address/port struct---*/
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(server_port);
if ( inet_aton(server_addr, &dest.sin_addr.s_addr) == 0 ) {
perror(server_addr);
exit(errno);
}
/*---Connect to server---*/
if ( connect(sC, (struct sockaddr*)&dest, sizeof(dest)) != 0 ) {
perror("Connect ");
exit(errno);
}
write (s, msg_read, strlen(msg_read)+1);
close(s);
close(sC);
}
Porém não está dando certo...
Aparentemente a mensagem não está sendo lida corretamente...
Pergunta
Fábio Lanza
Pessoal, preciso entregar um trabalho amanhã na universidade, o trabalho em sí é muito maior do que esta passagem, pensei que não teria problemas, mas não está funcionando...
Eu tenho um cliente e um servidor em Java, no meio desta comunicação, eu preciso colocar um "man-in-the-middle" em C...
Para isso estou usando o seguinte código:
Em C:
#include <stdio.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <resolv.h> #define PORT 31111 #define MAXBUF 1000 #define PORTC 41111 #define SERVER_ADDR "127.0.0.1" int main(int argc, char **argv){ int s, client_s, len, port; struct sockaddr_in self; struct sockaddr_in client; int addrlen = sizeof(client); char msg_write[MAXBUF]; char msg_read[MAXBUF]; port = PORT; if (argc == 2) { port = atoi(argv[1]); } /*---Open socket for streaming---*/ if ( (s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { perror("Socket"); exit(errno); } /*---Initialize server address/port struct---*/ bzero(&self, sizeof(self)); self.sin_family = AF_INET; self.sin_port = htons(port); self.sin_addr.s_addr = INADDR_ANY; /*---Assign a port number to the socket---*/ if ( bind(s, (struct sockaddr*)&self, sizeof(self)) != 0 ) { perror("socket--bind"); exit(errno); } /*---Make it a "listening socket"---*/ if ( listen(s, 1) != 0 ) { perror("socket--listen"); exit(errno); } /*---accept a connection ---*/ printf ("Server C accpeting connections!\n"); client_s = accept(s, (struct sockaddr*)&client, &addrlen); printf ("%s:%d connected\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port)); read (client_s, msg_read, MAXBUF); len = strlen(msg_read) - 1; if (msg_read[len] == '\n'){ msg_read[len] = ''; } printf ("Mensagem do cliente: %d\n", msg_read); //envia mensagem recebida ao servidor em java int sC, n, buflen, server_port; struct sockaddr_in dest; msg_write[MAXBUF]; char server_addr[50]; server_port = PORTC; strcpy (server_addr, SERVER_ADDR); /*---Open socket for streaming---*/ if ( (sC = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { perror("Socket"); exit(errno); } /*---Initialize server address/port struct---*/ bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(server_port); if ( inet_aton(server_addr, &dest.sin_addr.s_addr) == 0 ) { perror(server_addr); exit(errno); } /*---Connect to server---*/ if ( connect(sC, (struct sockaddr*)&dest, sizeof(dest)) != 0 ) { perror("Connect "); exit(errno); } write (s, msg_read, strlen(msg_read)+1); close(s); close(sC); }Porém não está dando certo...
Aparentemente a mensagem não está sendo lida corretamente...
Alguém poderia me ajudar por favor?
Abraços...
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.