Linux获取IP,子网掩码,网关等
(2019-10-17 17:24:33)
#include【stdio.h】 // 请自行改为尖括号,这里尖括号不能显示
#include 【cstdlib】
#include【string.h】
#include【unistd.h】
#include 【fstream】
#include【iostream】
#include 【net/if.h】
#include 【sys/ioctl.h】
#include 【arpa/inet.h】
#include 【errno.h】
#include 【linux/rtnetlink.h】
#include 【stdlib.h】
#include 【netinet/in.h】
#include 【arpa/inet.h】
#include 【sys/utsname.h】
#include 【limits.h】
#include 【ctype.h】
#include 【linux/sockios.h】
#include 【stdio.h】
#include 【string.h】
#include 【net/if.h】
#include 【sys/ioctl.h】
#include 【arpa/inet.h】
#include 【errno.h】
int getInterfaceInfo(void)
{
int fd;
int interfaceNum = 0;
struct ifreq buf[16];
struct ifconf ifc;
struct ifreq ifrcopy;
char mac[16] = {0};
char ip[32] = {0};
char broadAddr[32] = {0};
char subnetMask[32] = {0};
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) 【 0)
{
perror("socket");
close(fd);
return -1;
}
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if (!ioctl(fd, SIOCGIFCONF, (char *)&ifc))//获取所有网口信息
{
interfaceNum = ifc.ifc_len / sizeof(struct ifreq);
printf("interface num = %dn", interfaceNum);
while (interfaceNum-- 】 0) //逐个提取
{
printf("ndevice name: %sn", buf[interfaceNum].ifr_name);
//ignore the interface that not up or not runing
ifrcopy = buf[interfaceNum];
if (ioctl(fd, SIOCGIFFLAGS, &ifrcopy))//设置网口标记
{
printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__,
__LINE__);
close(fd);
return -1;
#include 【cstdlib】
#include【string.h】
#include【unistd.h】
#include 【fstream】
#include【iostream】
#include 【net/if.h】
#include 【sys/ioctl.h】
#include 【arpa/inet.h】
#include 【errno.h】
#include 【linux/rtnetlink.h】
#include 【stdlib.h】
#include 【netinet/in.h】
#include 【arpa/inet.h】
#include 【sys/utsname.h】
#include 【limits.h】
#include 【ctype.h】
#include 【linux/sockios.h】
#include 【stdio.h】