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:
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.