熟悉Linux命令行的童鞋都知道,ifconfig命令可以列出當前機器所有網(wǎng)絡(luò)設(shè)備節(jié)點對應(yīng)的IP地址,如下示例所示;


編輯
我們在實際的編程代碼中,也需要通過代碼來獲取本地的IP地址,那么有沒有辦法,直接在代碼中調(diào)用【ifconfig】命令行來獲取本地的IP地址呢?
答案肯定是有的,本文將給你正確的答案,請按下面的示例代碼:
#include
#include
int shell_cmd_excute(const char *cmd, char *result, int size)
{
int ret;
FILE *fp = NULL;
fp = popen(cmd, "r");
if (!fp) {
perror("popen error: ");
ret = -1;
goto exit_entry;
}
ret = fread(result, 1, size, fp);
if (ret <= 0) {
perror("fread error: ");
ret = -2;
goto exit_entry;
}
if (ret > 1 && ret < size && (result[ret-1] == '\r' || result[ret-1] == '\n')) {
result[ret-1] = '\0';
}
ret = 0;
exit_entry:
if (fp) {
fclose(fp);
}
return ret;
}
int get_local_ip_by_ifconfig(const char *interface, char *ip, int size)
{
int ret;
char cmd[128];
snprintf(cmd, sizeof(cmd), "ifconfig %s | sed -nr 's/.*inet (addr:)?(([0-9]*\\.){3}[0-9]*).*/\\2/p'", interface);
printf("shell cmd: %s\n", cmd);
ret = shell_cmd_excute(cmd, ip, size);
return ret;
}
int main(int argc, const char **argv)
{
int ret;
const char *interface;
char local_ip[128];
if (argc < 2) {
printf("Error param input !\n");
printf("Usage: %s [interface]\n", argv[0]);
printf("[interface]: network logic interface, like eth0/ppp0/wlan0/lo ...\n");
exit(-1);
}
interface = argv[1];
ret = get_local_ip_by_ifconfig(interface, local_ip, sizeof(local_ip));
if (!ret) {
printf("Get local ip OK, ip = %s\n", local_ip);
} else {
printf("Get local ip FAIL !\n");
}
return ret;
}
代碼編譯:
gcc -o ifconfig_ip ifconfig_ip.c
代碼運行測試:

因筆者的Linux環(huán)境只有eth0和lo這2個網(wǎng)絡(luò)設(shè)備節(jié)點,沒有wlan0、ppp0這兩個網(wǎng)絡(luò)設(shè)備節(jié)點,所以wlan0節(jié)點和ppp0這2個節(jié)點測試報錯了,而eth0和lo可以得到正確的IP地址,與文章開頭的ifconfig輸出是保持一致的。
以上測試代碼是筆者在平時工作中積累的代碼,可直接用于生產(chǎn)環(huán)境。使用過程,若發(fā)現(xiàn)問題,歡迎隨時交流討論,互相提高。謝謝。
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
Linux
+關(guān)注
關(guān)注
88文章
11763瀏覽量
219091 -
命令
+關(guān)注
關(guān)注
5文章
755瀏覽量
23766 -
網(wǎng)絡(luò)編程
+關(guān)注
關(guān)注
0文章
73瀏覽量
11118
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
常見的shell命令之網(wǎng)絡(luò)相關(guān)命令
192.168.0.232。IP地址的一般格式為:類別+網(wǎng)絡(luò)標號+主機標識。其中類別用來區(qū)分IP地址的類型,
發(fā)表于 08-20 09:50
NanoPi NEO - 使用命令行查看IP 地址和主機名 - 04
:? NanPi NEO已成功運行UbuntuCore系統(tǒng),并且保證NEO能聯(lián)網(wǎng)。1).打開終端,輸入以下命令,即可查看NanoPi NEO 的IP 地址:#ifconfig eth0
發(fā)表于 05-06 13:50
Linux如何配置IP地址
ifconfig命令:查看與配置網(wǎng)絡(luò)狀態(tài)的命令// 查看當前計算機所有網(wǎng)卡的配置信息#ifconfig// 查看某網(wǎng)卡的配置信息,如eth0
發(fā)表于 07-15 07:25
ifconfig改變IP地址重啟后變成默認地址是為什么?
[td]A40i開發(fā)板,通過ifconfig改變的ip地址,重啟后就變成auto_config_network中默認的ip
發(fā)表于 01-13 06:31
如何用DOS命令查看自己的IP地址
P地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺電腦都有一個邏輯地址,說的通俗一點
發(fā)表于 01-17 15:50
?1.3w次閱讀
網(wǎng)絡(luò)通信技術(shù):IP地址和MAC地址的差異
了解完網(wǎng)絡(luò)協(xié)議,我們會發(fā)現(xiàn),網(wǎng)絡(luò)通信的五層模型里,有兩個很重要的概念:IP 地址和 MAC 地址。 那么
ubuntu系統(tǒng)ip地址配置
在Ubuntu系統(tǒng)中配置IP地址,可以采用兩種方式: 通過命令直接配置。打開終端,輸入以下命令: sudo
linux查看物理接口的命令
顯示和配置網(wǎng)絡(luò)接口。它可以顯示當前系統(tǒng)上的所有網(wǎng)絡(luò)接口及其配置信息。以下是ifconfig命令的用法和輸出示例: ifconfig -a 這
CentOS7系統(tǒng)網(wǎng)絡(luò)配置命令
們來配置網(wǎng)絡(luò)接口、IP地址、網(wǎng)關(guān)、DNS服務(wù)器等。 查看網(wǎng)絡(luò)接口(ifconfig命令):
ifconfig配置靜態(tài)ip命令
ifconfig命令用于配置和管理網(wǎng)絡(luò)接口,包括接口的IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、以及其他網(wǎng)絡(luò)配置
linux更改ip步驟命令
inux是一種廣泛應(yīng)用于服務(wù)器和嵌入式設(shè)備的操作系統(tǒng),通過更改IP地址,可以對網(wǎng)絡(luò)進行重新配置和優(yōu)化,以滿足不同的需求。在Linux中,可以使用不同的
linux系統(tǒng)修改ip命令
Linux系統(tǒng)修改IP命令是掌握Linux網(wǎng)絡(luò)管理的基礎(chǔ)之一。在Linux操作系統(tǒng)中,我們可以使用命令行工具來實現(xiàn)對
Linux ip命令常用操作
Linux?ip命令常用操作 在Linux系統(tǒng)中,ip命令是用于管理網(wǎng)絡(luò)接口和路由的強大工具。相
【網(wǎng)絡(luò)編程】從ifconfig命令中取得機器的ip地址
評論