Em uma máquina RH Linux (chame-a de "myhost"), executei um comando dessa natureza:
ssh -N -l myuser -f -L 12345:localhost:12345 <IP of firewalled machine>
e estou tentando se conectar a esse túnel de um cliente de código C (rodando em "myhost") com um soquete criado assim:
sockfd = socket(AF_INET, SOCK_STREAM, 0);
com uma chamada connect () que se parece com isto:
status = connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
onde serv_addr é o produto disso:
hostinfo = gethostbyname(nameofhost);
memset((void *) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
memcpy((void *)&serv_addr.sin_addr.s_addr, (void *)hostinfo->h_addr, hostinfo->h_length);
Eu posso fazer isso com sucesso e tudo vai bem (ou seja, um programa servidor correspondente rodando na máquina firewall se comunica com o cliente rodando em "myhost") se a chamada do cliente para gethostbyname () para obter as informações necessárias do host struct " localhost ", mas não se ele usa o nome real da máquina local em que estou executando o cliente. Ou seja, o IP resultante é 127.0.0.1 em vez do IP real da máquina local. Se eu usar o último, fico ECONNREFUSED no final do cliente. O que estou fazendo de errado e / ou o que posso fazer para superar isso? Agradecemos antecipadamente por qualquer boa sugestão.
Tags ip socket ssh-tunneling