linuxc語言獲取ip
A. 怎麼用C語言獲取linux系統的網卡IP地址
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<net/if.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/ioctl.h>
//獲取地址
//返回IP地址字元串
intgetlocalip(char*outip)
{
inti=0;
intsockfd;
structifconfifconf;
charbuf=(char)malloc(512);
structifreq*ifreq;
char*ip;
//初始化ifconf
ifconf.ifc_len=512;
ifconf.ifc_buf=buf;
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
{
return-1;
}
ioctl(sockfd,SIOCGIFCONF,&ifconf);//獲取所有介面信息
close(sockfd);
//接下來一個一個的獲取IP地址
ifreq=(structifreq*)buf;
i=ifconf.ifc_len/sizeof(structifreq);
char*pos=outip;
intcount;
for(count=0;(count<5&&i>0);i--)
{
ip=inet_ntoa(((structsockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
if(strncmp(ip,"127.0.0.1",3)==0)//排除127.x.x.x,繼續下一個
{
ifreq++;
continue;
}else
{
printf("%s ",ip);
strcpy(pos,ip);
intlen=strlen(ip);
pos=' ';
pos+=len+1;
count++;
ifreq++;
}
}
free(buf);
return0;
}
//——————————-函數的調用方式————————————-
intmain(intargc,char**argv)
{
charip={'*'};
if(getlocalip(ip)==0)
{
printf("本機IP地址是:%s ",ip);
}
else
{
printf("無法獲取本機IP地址");
}
return0;
}
B. 用C語言如何獲取當前Linux系統的用戶名
可以使用getuid()獲取用戶的ID號,然後通過getpwuid函數通過用戶的uid查找用戶的passwd數據來獲取系統登錄的用戶名。
#include<stdio.h>
#include<pwd.h>
#include<unistd.h>
intmain(void)
{
structpasswd*pwd;
pwd=getpwuid(getuid());
printf("當前登陸的用戶名為:%s ",pwd->pw_name);
return0;
}
C. 編程:C語言編程取得本機ip地址
取本地地址 可以從「開始」-「程序」-「附件」-「命令提示符」裡面輸入英文「ipconfig/all」就可得到IP地址了,LINUX我也不太懂了。
D. C語言如何獲取嵌入式linux網卡上的mac地址
全對應的
getmacaddress.c
#include<stdio.h>
#ifdefined(WIN32)||(!defined(__GNUC__)&&!defined(__clang__))
#include<winsock2.h>
#include<iphlpapi.h>
#include<stdlib.h>
#pragmacomment(lib,"IPHLPAPI.lib")
#elifdefined(__linux__)
#include<string.h>//strncpy
#include<sys/ioctl.h>
#include<sys/socket.h>
#include<net/if.h>
#else
//bsd
#include<sys/types.h>//FreeBSDu_int
#include<ifaddrs.h>
#include<net/if.h>
#include<net/if_dl.h>
#include<net/if_types.h>
#endif
voidgetmacaddress(char*mac_address){
#ifdefined(WIN32)||(!defined(__GNUC__)&&!defined(__clang__))
PIP_ADAPTER_INFOpAdapterInfo;
PIP_ADAPTER_INFOpAdapter;
ULONGulOutBufLen=sizeof(IP_ADAPTER_INFO);
unsignedchar*addr;
mac_address[0]=0;
pAdapterInfo=(IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
if(!pAdapterInfo)return;
if(GetAdaptersInfo(pAdapterInfo,&ulOutBufLen)==ERROR_BUFFER_OVERFLOW){
free(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO*)malloc(ulOutBufLen);
if(!pAdapterInfo)return;
}
if(GetAdaptersInfo(pAdapterInfo,&ulOutBufLen)==NO_ERROR){
pAdapter=pAdapterInfo;
if(pAdapter){
addr=pAdapter->Address;
sprintf(mac_address,"%02x:%02x:%02x:%02x:%02x:%02x",
addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
}
}
free(pAdapterInfo);
#elifdefined(__linux__)
mac_address[0]=0;
structifreq*ifr,*ifend;
structifreqifreq;
structifconfifc;
structifreqifs[16];
intfd;
unsignedchar*addr;
fd=socket(AF_INET,SOCK_DGRAM,0);
ifc.ifc_len=sizeof(ifs);
ifc.ifc_req=ifs;
if(ioctl(fd,SIOCGIFCONF,&ifc)<0){close(fd);return;}
ifend=ifs+(ifc.ifc_len/sizeof(structifreq));
for(ifr=ifc.ifc_req;ifr<ifend;ifr++){
if(ifr->ifr_addr.sa_family==AF_INET){
strncpy(ifreq.ifr_name,ifr->ifr_name,sizeof(ifreq.ifr_name));
if(ioctl(fd,SIOCGIFHWADDR,&ifreq)<0)continue;
addr=ifreq.ifr_hwaddr.sa_data;
sprintf(mac_address,"%02x:%02x:%02x:%02x:%02x:%02x",
addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
}
}
close(fd);
#else
//bsd
mac_address[0]=0;
structifaddrs*ifa_list,*ifa;
structsockaddr_dl*dl;
unsignedchar*addr;
if(getifaddrs(&ifa_list)<0)return;
for(ifa=ifa_list;ifa;ifa=ifa->ifa_next){
dl=(structsockaddr_dl*)ifa->ifa_addr;
if(dl->sdl_family==AF_LINK&&dl->sdl_type==IFT_ETHER){
addr=(unsignedchar*)LLADDR(dl);
sprintf(mac_address,"%02x:%02x:%02x:%02x:%02x:%02x",
addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
return;
}
}
freeifaddrs(ifa_list);
#endif
}
E. 查詢Linux下用C語言查詢網卡信息linuxc網卡信息
隨著Linux發展壯大,它已經成為科技領域 neof 廣泛應用的操作系統。對於開發者來講,Linux提供了豐富的功能,他們可以使用不同的編程語言開發應用,編寫各種功能程序。在這里,我想介紹一下如何在Linux系統中利用C語言來查詢網卡信息。
首先,我們需要准備以下的開發環境:Linux系統、編譯器(如:GCC)、C語言庫。
環境准備完畢後,我們就可以著手編程了。在開發中,我們需要用到Linux下兩個函數:`ioctl`和`ifconf`。`ioctl`函數可以幫助我們獲取網卡的詳細信息,而`ifconf`函數則用於設置IP地址。
具體的操作步驟為:
1. 使用`ioctl`函數從網卡中獲取網卡信息,如:網卡名稱、MAC地址、網路掩碼和默認網關。
2. 將獲取到的信息保存在C語言的結構體中。
3. 使用`ifconf`函數設置IP地址的想應的參數。
4. 根據設置的參數,生成IP地址。
5. 將網卡信息和IP地址列印出來,顯示在屏幕上。
上述過程可以劃分為兩個步驟:**網卡信息查詢**和**IP地址設置**。前者有`ioctl`函數可以完成,而後者則是由`ifconf`來操作,它強大可靠,值得信賴。
通過執行以上步驟,我們就可以在Linux系統中利用C語言來查詢網卡信息。該技術目前比較流行,應用十分廣泛,也是Linux系統中常用的修改及操作技術。總之,使用C語言查詢網卡信息實現起來非常容易,通過簡單的幾步就可以實現我們想要的功能,非常方便快捷。