0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【網(wǎng)絡(luò)編程】從ifconfig命令中取得機(jī)器的ip地址

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-08-31 13:15 ? 次閱讀

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

img點(diǎn)擊并拖拽以移動(dòng)

編輯

我們?cè)趯?shí)際的編程代碼中,也需要通過代碼來獲取本地的IP地址,那么有沒有辦法,直接在代碼中調(diào)用【ifconfig】命令行來獲取本地的IP地址呢?

答案肯定是有的,本文將給你正確的答案,請(qǐng)按下面的示例代碼:

#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 

代碼運(yùn)行測(cè)試:

img

因筆者的Linux環(huán)境只有eth0和lo這2個(gè)網(wǎng)絡(luò)設(shè)備節(jié)點(diǎn),沒有wlan0、ppp0這兩個(gè)網(wǎng)絡(luò)設(shè)備節(jié)點(diǎn),所以wlan0節(jié)點(diǎn)和ppp0這2個(gè)節(jié)點(diǎn)測(cè)試報(bào)錯(cuò)了,而eth0和lo可以得到正確的IP地址,與文章開頭的ifconfig輸出是保持一致的。

以上測(cè)試代碼是筆者在平時(shí)工作中積累的代碼,可直接用于生產(chǎn)環(huán)境。使用過程,若發(fā)現(xiàn)問題,歡迎隨時(shí)交流討論,互相提高。謝謝。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208721
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    676

    瀏覽量

    21965
  • 網(wǎng)絡(luò)編程
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    10055
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    常見的shell命令網(wǎng)絡(luò)相關(guān)命令

    192.168.0.232。IP地址的一般格式為:類別+網(wǎng)絡(luò)標(biāo)號(hào)+主機(jī)標(biāo)識(shí)。其中類別用來區(qū)分IP地址的類型,
    發(fā)表于 08-20 09:50

    NanoPi NEO - 使用命令行查看IP 地址和主機(jī)名 - 04

    :? NanPi NEO已成功運(yùn)行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)的命令// 查看當(dāng)前計(jì)算機(jī)所有網(wǎng)卡的配置信息#ifconfig// 查看某網(wǎng)卡的配置信息,如eth0
    發(fā)表于 07-15 07:25

    ifconfig改變IP地址重啟后變成默認(rèn)地址是為什么?

    [td]A40i開發(fā)板,通過ifconfig改變的ip地址,重啟后就變成auto_config_network默認(rèn)的ip
    發(fā)表于 01-13 06:31

    如何用DOS命令查看自己的IP地址

    P地址IP協(xié)議提供的一種統(tǒng)一的地址格式,互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)電腦都有一個(gè)邏輯地址,說的通俗一點(diǎn)
    發(fā)表于 01-17 15:50 ?1.2w次閱讀
    如何用DOS<b class='flag-5'>命令</b>查看自己的<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    linux的ip命令旨在取代ifconfig

    linux的ip命令ifconfig類似,但前者功能更強(qiáng)大,并旨在取代后者。使用ip命令,只需一個(gè)命令
    的頭像 發(fā)表于 02-02 16:07 ?3041次閱讀
    linux的<b class='flag-5'>ip</b><b class='flag-5'>命令</b>旨在取代<b class='flag-5'>ifconfig</b>

    網(wǎng)絡(luò)通信技術(shù):IP地址和MAC地址的差異

    了解完網(wǎng)絡(luò)協(xié)議,我們會(huì)發(fā)現(xiàn),網(wǎng)絡(luò)通信的五層模型里,有兩個(gè)很重要的概念:IP 地址和 MAC 地址。 那么
    的頭像 發(fā)表于 10-22 15:12 ?4802次閱讀
    <b class='flag-5'>網(wǎng)絡(luò)</b>通信技術(shù):<b class='flag-5'>IP</b><b class='flag-5'>地址</b>和MAC<b class='flag-5'>地址</b>的差異

    linux系統(tǒng)查看ip地址命令

    在Linux系統(tǒng),可以使用ifconfig命令來查看IP地址。ifconfig
    的頭像 發(fā)表于 11-08 15:09 ?2554次閱讀

    ubuntu系統(tǒng)ip地址配置

    在Ubuntu系統(tǒng)配置IP地址,可以采用兩種方式: 通過命令直接配置。打開終端,輸入以下命令: sudo
    的頭像 發(fā)表于 11-13 17:01 ?1.3w次閱讀

    linux查看物理接口的命令

    顯示和配置網(wǎng)絡(luò)接口。它可以顯示當(dāng)前系統(tǒng)上的所有網(wǎng)絡(luò)接口及其配置信息。以下是ifconfig命令的用法和輸出示例: ifconfig -a 這
    的頭像 發(fā)表于 11-16 16:48 ?1118次閱讀

    CentOS7系統(tǒng)網(wǎng)絡(luò)配置命令

    們來配置網(wǎng)絡(luò)接口、IP地址、網(wǎng)關(guān)、DNS服務(wù)器等。 查看網(wǎng)絡(luò)接口(ifconfig命令):
    的頭像 發(fā)表于 11-17 11:07 ?4541次閱讀

    ifconfig配置靜態(tài)ip命令

    ifconfig命令用于配置和管理網(wǎng)絡(luò)接口,包括接口的IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、以及其他網(wǎng)絡(luò)配置
    的頭像 發(fā)表于 11-27 14:31 ?4487次閱讀

    linux更改ip步驟命令

    inux是一種廣泛應(yīng)用于服務(wù)器和嵌入式設(shè)備的操作系統(tǒng),通過更改IP地址,可以對(duì)網(wǎng)絡(luò)進(jìn)行重新配置和優(yōu)化,以滿足不同的需求。在Linux,可以使用不同的
    的頭像 發(fā)表于 11-27 14:38 ?1667次閱讀

    linux系統(tǒng)修改ip命令

    Linux系統(tǒng)修改IP命令是掌握Linux網(wǎng)絡(luò)管理的基礎(chǔ)之一。在Linux操作系統(tǒng),我們可以使用命令行工具來實(shí)現(xiàn)對(duì)
    的頭像 發(fā)表于 11-27 15:17 ?2008次閱讀

    IP地址網(wǎng)絡(luò)監(jiān)控

    如何識(shí)別和應(yīng)對(duì)異常流量和可疑活動(dòng)。 IP地址網(wǎng)絡(luò)監(jiān)控的基礎(chǔ) IP地址是互聯(lián)網(wǎng)設(shè)備的唯一標(biāo)識(shí)符
    的頭像 發(fā)表于 07-09 16:41 ?356次閱讀