Estou fazendo um aplicativo de servidor cliente. Quando eu tento obter o endereço IP para o servidor, ele mostra "nulo"

3

Eu tento executar o client.c e server.c no meu University Lab Computer, ele é executado sem o erro, mas mostra a mensagem de erro quando eu corro no meu computador. Como posso resolver isso ??? Estou usando o OracleVM VisualBox e usando o Ubuntu 16.04 (64 bits) LTS

Eu quero obter o endereço IP do servidor.

Ele mostra eth0: erro ao buscar informações da interface: Dispositivo não encontrado

Endereço IP do servidor: (null)

ifconfig -a

enp0s3
            Link encap: Ethernet HWaddr 08: 00: 27: 81: 6e: cf

        inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
        inet6 addr:  fe80::3bf1:9b86:ba56:9c1d/64  Scope:Link
        UP BROADCAST RUNNING MULTICAST   MTU:1500  Metric:1
        RX packets:35963 errors:0 dropped:0 overruns:0 frame:0
        TX packets:10611 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueulen:1000
        RX bytes:39593069(39.5 MB)  TX bytes:933682 (933.6 KB)

lo
Link encap: Loopback local

        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING MTU:65536  Metric:1
        RX packerts:825 errors:0 dropped:0 overruns:0 frame:0
        TX packerts:825 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1
        RX bytes:77335 (77.3KB)   TX bytes:77335 (77.3KB)  
    
por Ren Ping Ong 09.08.2016 / 15:45

2 respostas

1

Esta é mais uma questão de programação do que um problema de sistema operacional. Você seria melhor servido repostando essa pergunta no stackoverflow junto com o código-fonte associado.

Tendo dito isso. É assim que você faz uma iteração em todas as interfaces de rede física em qualquer Linux.

#include <stdio.h>      
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h> 
#include <string.h> 
#include <arpa/inet.h>

int main (int argc, const char * argv[]) {
    struct ifaddrs * ifAddrStruct=NULL;
    struct ifaddrs * ifa=NULL;
    void * tmpAddrPtr=NULL;

    getifaddrs(&ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
            // is a valid IP4 Address
            tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
            // is a valid IP6 Address
            tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } 
    }
    if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);
    return 0;
}

Saída no meu sistema:

ppetraki@:tmp$ make net
cc     net.c   -o net
ppetraki@:tmp$ ./net
lo IP Address 127.0.0.1
br0 IP Address 10.1.0.12
virbr0 IP Address 192.168.122.1
lo IP Address ::1
eth7 IP Address fe80::56ee:75ff:fe6d:d29e
br0 IP Address fe80::56ee:75ff:fe6d:d29e

Provavelmente, é melhor usar o nome do host e a resolução de nomes para um aplicativo cliente / servidor mais portátil. Boa sorte!

    
por ppetraki 09.08.2016 / 16:00
0

Não sei qual é o seu problema. Infelizmente, você não forneceu a configuração da sua interface de rede em /etc/network/interfaces . Talvez você possa tentar dar uma olhada nas configurações de ethernet do virtualbox abrindo virtualbox window > right click on virtual machine > settings > Network . Certifique-se de que a caixa de seleção Ativar adaptador de rede esteja marcada e escolha o adaptador de rede desejado. O número eth pode ser alterado desde que você copiou o Ubuntu de outra caixa virtual.

    
por Mdkusuma 09.08.2016 / 16:07

Tags