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语言查询网卡信息实现起来非常容易,通过简单的几步就可以实现我们想要的功能,非常方便快捷。