#  > Desenvolvimento >  > Linguagens de Programação >  >  Como descobrir meu ip em C?
Oi,

Qual funcao que eu uso pra descobrir meu ip em um programa em C? eu tentei usar o gethostbyname("localhost") mas ele vai retornar uma lista de varios 127.0.0.1!!!!

Uma outra forma poderia ser pegar o hostname com um getenv() e descobrir o IP apartir do nome. Tambem dava pra pegar das configuracoes do linux.

Mas o problema eh q eu quero q meu software seja portavel e q nao precise funcionar soh em linux!

Alguem tem alguma ideia?


Obrigado!

----------


## 1c3m4n

de cabeca eu num vo lembrar, dps preciso olha num programa q eu tinha feito, mas acho que com a include net.h tem uma funcao q faz isso, o problema vai ser vc determinar qual ip pegar no caso de ter 2 ou mais interfaces

----------

eu procurei aqui e nao achei, o unico net.h q tem eh /usr/include/linux/net.h

o meu programa ta funcionando mas eu pego o nome pelo getenv() e descubro o ip por gethostbyname()

se tu tiver um tempinho da uma olhada ai no teu programa pra ver como tu fez!


obrigado!

----------


## k4z1nh0

ae kras blz?
aki ta um exemplo nao tao especifico mas utiliza o comando do sistema ifconfig.


```
#include<stdio.h>
#include<stdlib.h>
/******************************************/
main(){
        printf("\n***************************\n");
        system("ifconfig");
        printf("\n***************************\n");
        return(0);
}
```

 basta pesquisar o resultado e achar o ip.

Espero ter dado uma auxiliada.

----------


## 1c3m4n

demoro mas achei.... o meu eskema nao pega o endereco em si, mas acho que q com ele vc consegue descobrir:

esse eh o codigo:


```
        /* Criando Socket de Conexao */
        if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
        {
                grava_log("Erro ao criar socket");
                exit(errno);
        }
 
        /* Configurando a Estrutura do Socket */
        bzero(&self, sizeof(self));
        self.sin_family = AF_INET;
        self.sin_port = htons(MY_PORT);
        self.sin_addr.s_addr = INADDR_ANY;
 
        /* Assumindo a Porta do Servidor */
        if ( bind(sockfd, (struct sockaddr*)&self, sizeof(self)) != 0 )
        {
                grava_log("Erro ao Assumir a porta do Servidor");
                exit(errno);
        }
 
        /* Ouvindo na Porta */
        if ( listen(sockfd, 20) != 0 )
        {
                grava_log("Erro ao Ouvir na Porta");
                exit(errno);
        }
```

 Esses são os includes:


```
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <resolv.h>
#include <arpa/inet.h>
#include <errno.h>
#include <pthread.h>
#include <string.h>
 
#define MY_PORT         9999 
#define MAXBUF          1024
```

----------


## Anonimo

hey cara, nao sei se entendi direito o que voce ker, mas a funcao inet_ntoa faz isso, aki vai um programa q fiz:

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

main(int argc, char *argv[])

{
int sock;
struct sockaddr_in server, cliente;
int tamanho;


if(argc != 2)

{

printf("%s <porta>\n",argv[0]);

exit(EXIT_FAILURE);
}

sock = socket(AF_INET, SOCK_STREAM, 0);

server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(atoi(argv[1]));
server.sin_family = AF_INET;

bind(sock, (void *)&server, sizeof(server));

listen(sock, 5);

tamanho = sizeof(struct sockaddr_in);

accept(sock, (void*)&cliente, &tamanho);

printf("%s",inet_ntoa(cliente.sin_addr));

close(sock);

}


se quiser, pode colocar um loop infinito antes de accept pra nao fechar a porta após a conexao, t+

----------

