C言語でホスト名とIPアドレスを取得して表示するプログラム
はじめに
この記事では、ローカルシステムのホスト名とIPアドレスを簡単な方法で確認する方法を解説します。実際にC言語でホスト名とIPアドレスを取得して表示するプログラムを作成してみましょう。
本プログラムでは、以下の関数を使用します。それぞれの関数には異なる役割があるため、まず各関数とその役割を確認しておきましょう。
| 関数 | 説明 |
|---|---|
| gethostname() | ローカルコンピュータの標準的なホスト名を取得します。 |
| gethostbyname() | ホストデータベースから、指定したホスト名に対応するホスト情報を検索します。 |
| inet_ntoa() | IPv4のネットワークアドレスを、ドット区切りの10進表記(例:192.168.0.1)のASCII文字列に変換します。 |
サンプルコード
処理の流れはシンプルです。① gethostname()でホスト名を取得 → ② gethostbyname()でホスト情報を検索 → ③ inet_ntoa()でIPアドレスを文字列に変換 → ④ 結果を表示という順番で行います。各ステップではエラーチェック用の関数を呼び出し、失敗した場合にエラーメッセージを表示して終了するようにしています。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void check_host_name(int hostname) { // ローカルコンピュータのホスト名を取得する関数
if (hostname == -1) {
perror("gethostname");
exit(1);
}
}
void check_host_entry(struct hostent * hostentry) { // ホスト名からホスト情報を検索する関数
if (hostentry == NULL) {
perror("gethostbyname");
exit(1);
}
}
void IP_formatter(char *IPbuffer) { // IP文字列をドット区切りの10進形式に変換する関数
if (NULL == IPbuffer) {
perror("inet_ntoa");
exit(1);
}
}
main() {
char host[256];
char *IP;
struct hostent *host_entry;
int hostname;
hostname = gethostname(host, sizeof(host)); // ホスト名を取得
check_host_name(hostname);
host_entry = gethostbyname(host); // ホスト情報を検索
check_host_entry(host_entry);
IP = inet_ntoa(*((struct in_addr*) host_entry->h_addr_list[0]));
// IPアドレスを文字列に変換
printf("Current Host Name: %s\n", host);
printf("Host IP: %s\n", IP);
}
実行結果(Linux環境でテスト済み)
Current Host Name: soumyadeep-VirtualBox Host IP: 127.0.1.1
補足ポイント
- h_addr_list[0] は、ホスト情報構造体に格納された最初のIPアドレス(ネットワークバイト順)を指します。
- 出力例の「127.0.1.1」はループバックアドレスの一種で、Debian系Linuxなどでホスト自身を指すために割り当てられることが多いアドレスです。
- なお、
gethostbyname()やinet_ntoa()は古いAPIであり、近年のPOSIX規格では非推奨とされています。実用的な開発では、IPv6にも対応したgetaddrinfo()/inet_ntop()の使用が推奨されます。
-
Tkinterウィンドウにホスト名とIPアドレスを表示する方法
ユーザーのIPアドレスを取得するには、Pythonの標準ネットワーキングインターフェースであるsocketモジュールを使用します。まずデバイスのホスト名を照会し、その後に関連付けられたIPアドレスを取得するという流れになります。この記事では、socketライブラリを使ってホスト名とIPアドレスを取得し、それらを2つのラベルに表示する方法を解説します。実装の手順tkinterライブラリをインポートし、tkinterフレームのインスタンスを作成します。geometryメソッドを使ってフレームのサイズを設定します。次に、socketライブラリのgethostname()メソッドを使用してホスト名を取
-
Gmailのメール表示名とアドレスを変更する方法を徹底解説
Gmailでメールアドレスや名前を変更したい理由は人それぞれです。10代の頃に作ったメールアドレスに今となっては恥ずかしい名前が付いているのかもしれませんし、単に気分転換として変えたいだけかもしれません。理由が何であれ、この記事ではGmailのメール名やアドレスを変更する手順をわかりやすく解説します。メール名とメールユーザー名の違い多くの人は「メール名」と「メールユーザー名」は同じものだと考えていますが、実はそうではありません。メール名とは、メールを送信したときに相手側に表示される「差出人名」のことです。一方、メールユーザー名とはメールアドレスそのものを指します。Gmailの場合、ユーザー名は