Linux獲取IP,子網掩碼,閘道器等

2021-09-11 03:57:53 字數 1493 閱讀 2179

最近專案中需要獲取linux系統的所有網口資訊並設定預設網口,若在終端檢視只需輸入ifconfig命令即可,通過程式設計實現則比較麻煩,通過查詢資料發現linux提供的ioctl()函式可以獲取相關資訊。下面首先介紹幾個需要使用到的結構體,然後提供乙個例項。

1. 結構體ifconf和ifreq

//ifconf通常是用來儲存所有介面資訊的

struct ifconf

ifc_ifcu;};

//ifreq用來儲存某個介面的資訊

struct ifreq ifr_ifru;

};

2. 結構體sockaddr和sockaddr_in

struct sockaddr ;

struct sockaddr_in ;

struct in_addr ;

二者長度一樣,都是16個位元組,即占用的記憶體大小是一致的,因此可以互相轉化。二者是並列結構,指向sockaddr_in結構的指標也可以指向sockaddr。

3. 例項

#include #include #include #include #include #include int getinte***ceinfo(void)

; char ip[32] = ;

char broadaddr[32] = ;

char subnetmask[32] = ;

if ((fd = socket(af_inet, sock_dgram, 0)) < 0)

ifc.ifc_len = sizeof(buf);

ifc.ifc_buf = (caddr_t)buf;

if (!ioctl(fd, siocgifconf, (char *)&ifc))//獲取所有網口資訊

//get the mac of this inte***ce

if (!ioctl(fd, siocgifhwaddr, (char *)(&buf[inte***cenum])))

else

//get the ip of this inte***ce

if (!ioctl(fd, siocgifaddr, (char *)&buf[inte***cenum]))

else

//get the broad address of this inte***ce

if (!ioctl(fd, siocgifbrdaddr, &buf[inte***cenum]))

else

//get the subnet mask of this inte***ce

if (!ioctl(fd, siocgifnetmask, &buf[inte***cenum]))

else}}

else

close(fd);

return 0;

}int main(void)

參考:

IP 子網掩碼 閘道器

1.ip位址 ip位址使用32位二進位制位址格式,為方便記憶,通常使用以點號劃分的十進位制來表示。乙個ip位址主要由兩部分組成 一部分是用於標識該位址所從屬的網路號 另一部分用於指明該網路上某個特定主機的主機號。三類常用的ip a類ip段 0.0.0.0 到127.255.255.255 0段和12...

IP位址 子網掩碼 閘道器

1 ip和ip位址 ip internet protocol 是為計算機網路互連通訊而設計的網路協議,任何廠家生產的計算機系統,只要遵循ip協議就可以與網際網路互連互通。那網際網路中計算機之間要實現通訊,就必須具有乙個對應的ip位址,並且網路中每台計算機的ip位址都是唯一的,從而與其他計算機區別開,...

ip 子網掩碼 閘道器 dns dhcp

經常用windows,只要插上網線就自動能上網了。但是當網路出問題了確不知道怎麼解決。所以我來科普下關於網路的基礎知識。首先開啟網路的狀態我們會發現幾個引數 1.ip與mac 我們的ip分為兩個部分 網路部分和主機部分。網路部分好比就是你在xx省xx市xx鎮,這個是國家固定下來了的。但是xx小區xx...