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をちゃんと確認した方が良いです。