Android NativeバイナリでIPアドレスを取得するプログラム

#include <stdio.h>

#include <string.h>

#include <arpa/inet.h>

#include <net/if.h>

#include <sys/ioctl.h>

 

int main(){

 char myIP[16];

 struct ifreq ifr;

 int fd = socket(AF_INET, SOCK_DGRAM, 0);

 ifr.ifr_addr.sa_family = AF_INET;

 strncpy(ifr.ifr_name, "wlan0", IFNAMSIZ-1);

 ioctl(fd, SIOCGIFADDR, &ifr);

 close(fd);

 strcpy(myIP, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

 printf("IP address:%s\n", myIP);

 return;

}

 

ポイントはネットワークインタフェースを正しく設定すること。

$ ls /sys/class/net

でネットワークインタフェース一覧が取得できるので、

一応全部試してみたらwlan0が有効で正しくIPアドレスが表示された。

無線だから当たり前だけどー^^;

 

一応、私の環境(Android 4.2 on Nexus S)では、

ifb0, ifb1, ip6tnl0, lo, rmnet0, rmnet1, rmnet2, sit0, wlan0

が出てきました。

 

追記(2013/01/27)

Gingerbreadでは、wlan0は存在せず、em1みたいのが無線LANインタフェースでした。

端末・OSによって違うのでsys/class/netをちゃんと確認した方が良いです。