這 是一項不太清晰而且沒有多大意義的工作。乙個原因是網路位址的設定非常靈活而且都是允許使用者進行個性化設定的,比如一台計算機上可以有多塊物理網絡卡或者虛 擬網絡卡,乙個網絡卡上可以繫結多個ip位址,使用者可以為網絡卡設定別名,可以重新命名網絡卡,使用者計算機所在網路拓撲結構未知,主機名設定是乙個可選項並且同樣可 以為乙個計算機繫結多個主機名等,這些資訊都會有影響。脫離了網路連線,單獨的網路位址沒有任何意義。程式設計中遇到必須獲取計算機ip的場景,應該考慮將這 一選項放到配置檔案中,由使用者自己來選擇。
通過google,程式設計獲取ip位址大約有以下三種思路:
1. 通過gethostname()和gethostbyname()
#include
#include
#include
#include
#include
#include
int main()
return 0;
}執行:
[whb@jcwkyl c]$ ./local_ip
hostname: jcwkyl.jlu.edu.cn
address list: 10.60.56.90
2. 通過列舉網絡卡,api介面可檢視man 7 netdevice
/***來自stackoverflow: */
#include
#include
#include
#include
#include
#include
int main (int argc, const char * argv) else if (ifaddrstruct->ifa_addr->sa_family==af_inet6)
ifaddrstruct=ifaddrstruct->ifa_next;
}return 0;
}執行 :
[whb@jcwkyl c]$ ./local_ip2
lo ip address 127.0.0.1
eth0 ip address 10.60.56.90
eth0:1 ip address 192.168.1.3
lo ip address ::
eth0 ip address ::2001:da8:b000:6213:20f:1fff
eth0 ip address 0:0:fe80::20f:1fff
3. 開啟乙個對外界伺服器的網路連線,通過getsockname()反查自己的ip
Linux 獲取本機IP位址
linux 獲取本機ip位址 說明 family at inet ipv4 family at inet6 ipv6 address 提取得到的ip位址所要儲存的位址 size strlen sampleip 192.168.123.128 max ipv4 15 某些標頭檔案應在其他方面,在本程式...
SOCKET 程式設計 獲取本機IP 位址
源程式 include include include include include include include include include include define port 7778 define maxdatasize 1024 int main setsockopt socke...
獲取本機IP位址
cstring strlocalip char szhostname 64 memset szhostname,0x00,sizeof szhostname gethostname szhostname,sizeof szhostname phostent phost gethostbyname s...