+ Responder ao Tópico



  1. #1
    Visitante

    Padrã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!

  2. #2

    Padrão Como descobrir meu ip em C?

    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

  3. #3
    Visitante

    Padrão Como descobrir meu ip em C?

    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!

  4. #4
    k4z1nh0
    Visitante

    Padrão codigo simples

    ae kras blz?
    aki ta um exemplo nao tao especifico mas utiliza o comando do sistema ifconfig.
    Código :
    #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.

  5. #5

    Padrão Como descobrir meu ip em C?

    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:
    Código :
            /* 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:
    Código :
    #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

  6. #6
    Anonimo
    Visitante

    Padrão Como descobrir meu ip em C?

    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+