2008年07月22日

自マシンのIPアドレスを取得

Linux C/C++(ソースのコンパイルはg++で行っています)で、ネットワークデバイス名に対応するIPアドレスを取得する関数です。


#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <linux/if.h>
#include <sys/ioctl.h>

const char* GetMyIpAddr(const char* device_name);

int main(){
const char* r = GetMyIpAddr("eth0");
printf("%s\n", r);
return 0;
}

/**
* 自マシンのIPアドレスを取得します。
* @param デバイス名(e.g. "eth0")
* @return 「数値とドット」記法のアドレス
*/

const char* GetMyIpAddr(const char* device_name) {
//指定したデバイス名のIPアドレスを取得します。
int s = socket(AF_INET, SOCK_STREAM, 0);

struct ifreq ifr;
ifr.ifr_addr.sa_family = AF_INET;
strcpy(ifr.ifr_name, device_name);
ioctl(s, SIOCGIFADDR, &ifr);
close(s);

struct sockaddr_in addr;
memcpy( &addr, &ifr.ifr_ifru.ifru_addr, sizeof(struct sockaddr_in) );
return inet_ntoa(addr.sin_addr);
}


posted by 台北猫々 at 20:58| Comment(1) | TrackBack(0) | 技術メモ(Linux C/C++)
この記事へのコメント
それで、デバイス名はどこから取ってくるのでしょうか。
デバイス名を自動取得できなければ作ったアプリケーションが端末依存になると思うのですが…
Posted by 克兎 at 2014年07月10日 21:26
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/17232885

この記事へのトラックバック