68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/**************************
|
|
* Network Common Depend. *
|
|
***************************
|
|
* Designed & Developed by *
|
|
* Adrien Marquès *
|
|
* <xdrm-brackets> *
|
|
***************************
|
|
* doowap31@gmail.com *
|
|
**************************/
|
|
#include "common.h"
|
|
|
|
|
|
|
|
|
|
|
|
/* Retourne l'adresse IP du serveur (première interface excepté "lo")
|
|
*
|
|
* @history
|
|
* [0] Initialisation des variables
|
|
* [1] On récupère la liste des interfaces
|
|
* [2] Parcourt des interfaces
|
|
* 1. Si "lo" -> suivant
|
|
* 2. Si pas IPV4 -> suivant
|
|
* 3. Si ok, on retourne l'ip
|
|
* [3] Cas échéant -> aucun résultat (NULL)
|
|
*
|
|
*/
|
|
struct in_addr* GET_LOCAL_IP(){
|
|
/* [0] Initialisation des variables
|
|
=========================================================*/
|
|
struct ifaddrs *list; // list of interfaces
|
|
struct ifaddrs *it; // interface iterator
|
|
struct sockaddr_in *info; // interface info
|
|
struct in_addr *result; // ip trouvée
|
|
result = malloc( sizeof(struct in_addr) );
|
|
|
|
|
|
/* [1] On récupère la liste des interfaces
|
|
=========================================================*/
|
|
getifaddrs(&list);
|
|
|
|
|
|
/* [2] Parcourt des interfaces
|
|
=========================================================*/
|
|
for( it = list ; it ; it = it->ifa_next ){
|
|
|
|
/* 1. Si "lo" -> suivant */
|
|
if( strcmp(it->ifa_name, "lo") == 0 )
|
|
continue;
|
|
|
|
/* 2. Si pas IPV4 -> suivant */
|
|
if( it->ifa_addr->sa_family != AF_INET )
|
|
continue;
|
|
|
|
/* 3. Si ok, on retourne l'ip */
|
|
info = (struct sockaddr_in*) it->ifa_addr;
|
|
memcpy(result, &info->sin_addr, sizeof(struct in_addr));
|
|
freeifaddrs(list);
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
/* [3] Cas échéant -> aucun résultat
|
|
=========================================================*/
|
|
freeifaddrs(list);
|
|
return NULL;
|
|
} |