1. 程式人生 > >windows和linux環境中分別如何用C語言獲得本機IP地址?

windows和linux環境中分別如何用C語言獲得本機IP地址?

一、Windows情形

  我們可以在cmd中敲入ipconfig來獲取本機ip地址,下面寫個程式來獲取本機ip地址(結果相同):

    #include<stdio.h>  
    #include<winsock2.h>  
    #pragma comment(lib,"ws2_32.lib") // 靜態庫  
      
    void findIP(char *ip, int size)   
    {  
        WORD v = MAKEWORD(1, 1);  
        WSADATA wsaData;  
        WSAStartup(v, &wsaData); // 載入套接字型檔  
      
        struct hostent *phostinfo = gethostbyname("");  
        char *p = inet_ntoa (* ((struct in_addr *)(*phostinfo->h_addr_list)) );                
        strncpy(ip, p, size - 1);  
        ip[size - 1] = '\0';  
        WSACleanup( );  
    }   
      
    int main()  
    {  
        char ip[20] = {0};  
        findIP(ip, sizeof(ip));  
        printf("%s\n", ip);  
      
        return 0;  
    }  

      上面的程式僅僅獲取一個ip, 那要獲取所有ip, 怎麼辦呢? 很簡單, 充分利用上面的list啊, 如下:

    #include<stdio.h>  
    #include<winsock2.h>  
    #pragma comment(lib,"ws2_32.lib") // 靜態庫  
          
    void getIPs()  
    {  
        WORD v = MAKEWORD(1, 1);    
        WSADATA wsaData;    
        WSAStartup(v, &wsaData); // 載入套接字型檔    
      
        int i = 0;  
        struct hostent *phostinfo = gethostbyname("");    
        for(i = 0; NULL != phostinfo&& NULL != phostinfo->h_addr_list[i]; ++i)  
        {  
            char *pszAddr = inet_ntoa(*(struct in_addr *)phostinfo->h_addr_list[i]);  
            printf("%s\n", pszAddr);  
        }  
      
        WSACleanup( );    
    }  
      
    int main()  
    {  
        getIPs();  
        return 0;  
    }  

二、Linux下情形
#include <stdio.h>;  
#include <sys/types.h>;  
#include <sys/socket.h>;  
#include <sys/ioctl.h>;  
#include <netinet/in.h>;  
#include <net/if.h>;  
#include <net/if_arp.h>;  
#include <arpa/inet.h>;  
#include <errno.h>;  
      
#define ETH_NAME        "eth0"  
      
int main()  
{  
        int sock;  
        struct sockaddr_in sin;  
        struct ifreq ifr;  
              
        sock = socket(AF_INET, SOCK_DGRAM, 0);  
        if (sock == -1)  
        {  
                perror("socket");  
                return -1;                  
        }  
              
        strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);  
        ifr.ifr_name[IFNAMSIZ - 1] = 0;  
              
        if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)  
        {  
                perror("ioctl");  
                return -1;  
        }  
      
        memcpy(&sin, &ifr.ifr_addr, sizeof(sin));  
        fprintf(stdout, "eth0: %s\n", inet_ntoa(sin.sin_addr));  
              
        return 0;  
}



相關推薦

windowslinux環境分別如何用C語言獲得IP地址

一、Windows情形   我們可以在cmd中敲入ipconfig來獲取本機ip地址,下面寫個程式來獲取本機ip地址(結果相同):    #include<stdio.h> #include<winsock2.h>

如何用C語言獲得IP地址?(獲取一個ip或者獲取所有ip

        我們可以在cmd中敲入ipconfig來獲取本機ip地址,下面寫個程式來獲取本機ip地址(結果相同): #include<stdio.h> #include<win

LinuxC語言獲取IP地址

#include <sys/ioctl.h> #include <net/if.h> #include <arpa/inet.h>   char* GetLocalIp() { int MA

C語言獲取IP地址

char* getIpAddress(){ WSADATA wsaData; char name[255];//定義用於存放獲得的主機名的變數 char *ip;//定義IP地址變數 PHOSTENT hostinfo;

C語言 獲取IP地址,非迴環地址

#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #inc

C#】獲取IP地址

前言    最近開始做牛腩新聞釋出系統,剛接觸網頁開發,因為沒有基礎,做起來比較困難,當然BUG就多了。不過“牛”老師水平很高,講的很清楚,出現BUG分分鐘就可以搞定。在做評論新聞這一功能時,需要獲取本機的IP地址。這時就出現BUG了。 BUG 根據“牛”老師的方法: IP

開發問題(一)在windowslinux端口占問題

logs ets 情況 toc 端口占用 所有 註意 linu eclips 前言   今天在MyEclipse中使用tomcat發現tomcat端口8080竟然被占用了,所以就找了一下解決辦法共參考!   在網絡程序的調試過程中,經常發生一些出乎意料的事情,比如創建一

JAVA環境變數在Windowslinux環境下的配置

一丶 如果是Win7或Win8,使用滑鼠右擊"我的電腦"->屬性->高階->環境變數 系統變數->新建->變數名:JAVA_HOME 變數值:JDK對應的安裝目錄 系統變數->新建->變數名:CLASSPATH 變數值:.;%JAVA_HOME%\l

windowslinux環境javacv視訊抓圖

踩過不少坑,特此記錄一下。遇到的問題基本是在windows執行沒問題,然後在linux環境下各種報錯 比如這樣的: 這樣的 廢話少說。 據瞭解到有兩種方法能實現視訊抓圖 1、ffmpeg      下載地址:http://www.ff

mongodb基礎(安裝MongoDB 資料庫(Windows Linux 環境))

開啟官網:https://www.mongodb.com/download-center?jmp=nav#community 選擇Community Server 4.0.1 的版本。  安裝與啟動 在D 盤建立安裝目錄,D:\MongoDB,將解壓後的檔案拷入新建的

WindowsLinux環境下搭建SVN伺服器

--------------------------Windows下搭建SVN伺服器----------------------------- 一、安裝SVN服務端 軟體包Setup-Subversion-1.8.17.msi,下載地址:https://source

WindowsLinux之間ftp自動上傳下載腳

ftp一、Windows主機自動從Linux ftp服務器下載文件 二、Linux主機自動從Windows ftp服務器下載文件Windows和Linux之間ftp自動上傳下載腳本

windowsC++獲取IP地址

ali 返回 轉換成 data info AC ctrl nag != BSTR CamUtilsCtrl::GET_TERM_IP(void){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult

linux c 獲取ip地址

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <

Linux下靠譜的獲取IP地址C程式碼實現

#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string

LinuxC程式設計實現---獲取IP地址

在LINUX下,如果需要獲取本機的IP地址,需要用到以下一個結構體,該結構體在/usr/include/net/if.h檔案中 struct ifreq { # define IFHWADDRLEN 6 # define IFNAMSIZ IF_

【程式設計之美】C語言實現狀態(實用)

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。 本文連結:https://www.cnblogs.com/lihuidashen/p/11510532.html https://mp.weixin.qq.com/s/xDAfaEFY

C#學習筆記】獲得IP

tostring class main style dns system pad space ipad using System; using System.Net; namespace ConsoleApplication { class Prog

清除被隱藏網卡占IP地址,IP地址被占

mac 菜單 ntc ip地址 evm tar 設置 devices 修改註冊表 清除被隱藏網卡及占用的IP地址,本機IP地址被占用當主機中的網卡更換或換了一個插槽時,還要用到原來網卡的IP地址,但系統提示IP地址已經被本機中網卡占用,而主機裏確實只有剛插入的網卡,這個原

shell獲取ip地址

align 本機ip www. .cn logs res font 地址 獲取本機ip 方法一: /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk ‘{print $2}‘|tr -d "addr