精华内容
下载资源
问答
  • 下面是获取Linux子网掩码,Windows的获取方式有变化,需要通过cmd.exe ipconfig运行后截取内容,这里暂时只有Linux获取方式。 [code="java"] String getLocalMask(){ String cmd="ifconfig&...
    下面是获取Linux下子网掩码,Windows的获取方式有变化,需要通过cmd.exe ipconfig运行后截取内容,这里暂时只有Linux的获取方式。

    String getLocalMask(){
    String cmd="ifconfig";
    //String cmd="curl -s 'http://checkip.dyndns.org' | sed 's/.*Current IP Address: \\([0-9\\.]*\\).*/\\1/g'";
    String Mask="";//子网掩码
    try{

    Process proc = Runtime.getRuntime().exec(cmd);

    BufferedReader theReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

    String infor ="";

    while((infor=theReader.readLine())!=null){
    //out.print(infor);
    if (infor.indexOf("Mask:")!=-1){
    Mask = infor.substring(infor.indexOf("Mask:")+5);
    break;

    }
    }

    theReader.close();
    proc.destroy();

    }catch(Exception e){
    e.printStackTrace();
    }
    return Mask;
    }
    展开全文
  • Linux获取IP,子网掩码,网关等

    千次阅读 2019-02-20 16:38:15
    最近项目中需要获取linux系统的所有网口信息并设置默认网口,若在终端查看只需输入ifconfig命令即可,通过编程实现则比较麻烦,通过查询资料发现linux提供的ioctl()函数可以获取相关信息。下面首先介绍几个需要使用...

        最近项目中需要获取linux系统的所有网口信息并设置默认网口,若在终端查看只需输入ifconfig命令即可,通过编程实现则比较麻烦,通过查询资料发现linux提供的ioctl()函数可以获取相关信息。下面首先介绍几个需要使用到的结构体,然后提供一个实例。

         1. 结构体ifconf和ifreq

    //ifconf通常是用来保存所有接口信息的
    struct ifconf 
    {
        int    ifc_len;            /* size of buffer    */
        union 
        {
            char *ifcu_buf;                        /* input from user->kernel*/
            struct ifreq *ifcu_req;        /* return from kernel->user*/
        } ifc_ifcu;
    };
     
    //ifreq用来保存某个接口的信息
    struct ifreq {
        char ifr_name[IFNAMSIZ];
        union {
            struct sockaddr ifru_addr;
            struct sockaddr ifru_dstaddr;
            struct sockaddr ifru_broadaddr;
            short ifru_flags;
            int ifru_metric;
            caddr_t ifru_data;
        } ifr_ifru;
    };
    

        2. 结构体sockaddr和sockaddr_in

    struct sockaddr {
        unsigned short    sa_family;    // 2 bytes address family, AF_xxx
        char              sa_data[14];     // 14 bytes of protocol address
    };
     
    struct sockaddr_in {
        short            sin_family;       // 2 bytes e.g. AF_INET, AF_INET6
        unsigned short   sin_port;    // 2 bytes e.g. htons(3490)
        struct in_addr   sin_addr;     // 4 bytes see struct in_addr, below
        char             sin_zero[8];     // 8 bytes zero this if you want to
    }; 
    struct in_addr {
        unsigned long s_addr;          // 4 bytes load with inet_pton()
    };

        二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。

        3. 实例

      #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;
                  }
      
                  //get the mac of this interface  
                  if (!ioctl(fd, SIOCGIFHWADDR, (char *)(&buf[interfaceNum])))
                  {
                      memset(mac, 0, sizeof(mac));
                      snprintf(mac, sizeof(mac), "%02x%02x%02x%02x%02x%02x",
                          (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[0],
                          (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[1],
                          (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[2],
                          (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[3],
                          (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[4],
                         (unsigned char)buf[interfaceNum].ifr_hwaddr.sa_data[5]);
                      printf("device mac: %sn", mac);
                  }
                  else
                  {
                      printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__, __LINE__);
                      close(fd);
                      return -1;
                  }
      
                  //get the IP of this interface    
                  if (!ioctl(fd, SIOCGIFADDR, (char *)&buf[interfaceNum]))
                  {
                      snprintf(ip, sizeof(ip), "%s",
                          (char *)inet_ntoa(((struct sockaddr_in * &
                        (buf[interfaceNum].ifr_addr))->sin_addr));
                      printf("device ip: %sn", ip);
                  }
                  else
                  {
                      printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__, __LINE__);
                      close(fd);
                      return -1;
                  }
      
                  //get the broad address of this interface    
                  if (!ioctl(fd, SIOCGIFBRDADDR, &buf[interfaceNum]))
                  {
                      snprintf(broadAddr, sizeof(broadAddr), "%s",
                          (char *)inet_ntoa(((struct sockaddr_in *)&
                            (buf[interfaceNum].ifr_broadaddr))->sin_addr));
                      printf("device broadAddr: %sn", broadAddr);
                  }
                  else
                  {
                      printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__, __LINE__);
                      close(fd);
                      return -1;
                  }
       
                 //get the subnet mask of this interface  
                 if (!ioctl(fd, SIOCGIFNETMASK, &buf[interfaceNum]))
                 {
                     snprintf(subnetMask, sizeof(subnetMask), "%s",
                         (char *)inet_ntoa(((struct sockaddr_in *)&
                            (buf[interfaceNum].ifr_netmask))->sin_addr));
                     printf("device subnetMask: %sn", subnetMask);
                 }
                 else
                 {
                     printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__, __LINE__);
                     close(fd);
                     return -1; 
                 }
             }
         }
         else
         {
             printf("ioctl: %s [%s:%d]n", strerror(errno), __FILE__, __LINE__);
             close(fd);
             return -1;
         }
       
         close(fd);
         return 0;
    }
    
    int main(void)
    {
         getInterfaceInfo();
         return 0;
    }

     

     

     

     

     

    参考:

    https://blog.csdn.net/CYKsky/article/details/77986645

    https://www.cnblogs.com/fnlingnzb-learner/p/6427388.html

    展开全文
  • #include <arpa/inet.h> #include <sys/socket.h> #include <netdb.h> #include <ifaddrs.h> #include <stdio.h> #include <stdlib.h> #include <...int main(i...
    #include <arpa/inet.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <ifaddrs.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
    	struct ifaddrs *ifaddr, *ifa;
    	int family, s;
    	char host[NI_MAXHOST];
    	struct sockaddr_in *addr;
    	
    	if (getifaddrs(&ifaddr) == -1) {
    		perror("getifaddrs");
    		exit(EXIT_FAILURE);
    	}
    	
    	for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    		if (ifa->ifa_addr == NULL)
    			continue;
    		
    		family = ifa->ifa_addr->sa_family;
    		
    		if (family == AF_INET)
    		{
    			printf("Device name: %s\n", ifa->ifa_name);
    			addr = (struct sockaddr_in *)ifa->ifa_addr;
    			printf("	Addr: %s\n",
    				inet_ntop(AF_INET, &(addr->sin_addr), host, sizeof(host)));
    			
    			addr = (struct sockaddr_in *)ifa->ifa_broadaddr;
    			printf("	Bcast address: %s\n",
    				inet_ntop(AF_INET, &(addr->sin_addr), host, sizeof(host)));
    			
    			addr = (struct sockaddr_in *)ifa->ifa_netmask;
    			printf("	Mask address: %s\n",
    				inet_ntop(AF_INET, &addr->sin_addr, host, sizeof(host)));
    		}
    	}
    }

     

    展开全文
  • int GetIPAddrAndNetMask(char *ps8Ipaddr, char *ps8NetMask, const char *ps8IfName) {  int sock;  struct sockaddr_in *sin;  struct ifreq *ifr;  char as8Buff[BUFSIZ];... if (

    int GetIPAddrAndNetMask(char *ps8Ipaddr, char *ps8NetMask, const char *ps8IfName)
    {
     int sock;
     struct sockaddr_in *sin;
     struct ifreq *ifr;
     char as8Buff[BUFSIZ];
     struct ifconf conf;

     if ( ( sock = socket(AF_INET, SOCK_DGRAM, 0) ) < 0)
     {
      perror("socket");
      return -1;
     }

     conf.ifc_len = BUFSIZ;
     conf.ifc_buf = as8Buff;
     if( ioctl( sock, SIOCGIFCONF, &conf) == -1 )
     {
      close( sock );
      return -1;
     }

     int s32Num = conf.ifc_len / sizeof(struct ifreq);
     ifr = conf.ifc_req;

     for (int i = 0; i < s32Num; i++ )
     {
      sin = (struct sockaddr_in *)(&ifr->ifr_addr );
      if ( ioctl( sock, SIOCGIFFLAGS, ifr) == -1 )
      {
       close( sock );
       return -1;
      }

      if ( ((ifr->ifr_flags & IFF_LOOPBACK) == 0) &&
        (ifr->ifr_flags & IFF_UP) &&
        (strcmp(ifr->ifr_name, ps8IfName) == 0) )
      {
       ps8Ipaddr[0] = (sin->sin_addr.s_addr)       & 0xFF;
       ps8Ipaddr[1] = (sin->sin_addr.s_addr) >> 8  & 0xFF;
       ps8Ipaddr[2] = (sin->sin_addr.s_addr) >> 16 & 0xFF;
       ps8Ipaddr[3] = (sin->sin_addr.s_addr) >> 24 & 0xFF;
      }
      ifr++;
     }
      if ( ps8NetMask )
     {
      sin = (struct sockaddr_in *)(&ifr->ifr_addr);
      strcpy(ifr->ifr_name, ps8IfName);
      if ( ioctl( sock, SIOCGIFNETMASK, ifr ) == -1 )
      {
       close( sock );
       return -1;
      }

      ps8NetMask[0] = (sin->sin_addr.s_addr)       & 0xFF;
      ps8NetMask[1] = (sin->sin_addr.s_addr) >> 8  & 0xFF;
      ps8NetMask[2] = (sin->sin_addr.s_addr) >> 16 & 0xFF;
      ps8NetMask[3] = (sin->sin_addr.s_addr) >> 24 & 0xFF;

       }
     close(sock);
     return 0;
    }

    展开全文
  • ioctl函数原型: int ioctl(int fd, int request, ..../*void *arg*/) int fd:为socket函数返回值 int request:SIOCSIFADDR 修改ip地址  SIOCSIFNETMASK 修改子网掩码  SIOCADDRT 修改网关 ...ip和子网掩码结构
  • Linux获取本地IP地址、子网掩码、广播地址: 最近有个项目需求需要得到自己的广播地址从而发给在同一广播域的其他设备,在网上查找了一些资料,可以调用驱动接口获取。我设备有三个ip接口:eth0、eth1、和回环...
  • //获取子网掩码的函数QString GetLocalNetMask(){ int sock_netmask; char netmask_addr[50]; struct ifreq ifr_mask; struct sockaddr_in *net_mask; sock_netmask = socket( AF_INET, SOCK_STREAM, 0
  • 转自 : http://blog.csdn.net/dqj_forever/article/details/39519473 文章原载于:...主要是通过socket 和 ioctl获取。...我觉得这些信息的获取可以去参考If
  • /* mode time:20120727 ... 打印网卡的ip地址 子网掩码 广播地址 mac地址 环境: [root@bogon temp]# uname -a Linux bogon 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686
  • 获取IP和子网掩码 int getLocalInfo(char IP[],char Mask[]) { int fd; int interfaceNum = 0; struct ifreq buf[16]; struct ifconf ifc; struct ifreq ifrcopy; char mac[16] = {0}; char ip[32] = {0}; ...
  • Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令。 $ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:25:64:ba:8d:be inet ...
  • 获取Linux平台下的配置参数,如IP,子网掩码,GateWay和Mac地址 [cpp] view plaincopy int GetComputerInfo(char *ip,char *zwym,char*brdaddr,char *mac) 
  • 1.获取IP地址,子网掩码,物理地址。 2.配置IP地址,子网掩码,网关等。 3.IP地址合法验证和子网掩码验证。 TIPS:部分代码摘自网上,代码已测试通过。 #include #include #include #include #include...
  • //子网掩码 inet_ntop(AF_INET, &(((struct sockaddr_in*)((*IfAddrStruct).ifa_broadaddr))->sin_addr), board, 64);//广播地址 cout ip: " } else if(IfAddrStruct->ifa_addr->sa_family == AF_INET6)//IPV6 { ...
  • int get_gw(char *gw) { FILE *fp; char buf[1024];...gateway是通过 ip route命令获取 ... //printf("%s mac address is :%02X:%02X:%02X:%02X:%02X:%...eth1 之类 mac ip mask 都是通过ioctl 这个函数获取
  • winPcap获取网卡网络地址和子网掩码

    千次阅读 2012-05-04 22:40:23
    下面是获取网络地址(不是IP地址)和子网掩码的示例,没时间接着往下做例子了,因为接下来需要在LINUX下面使用libPcap,当然我会贴出代码,会linux编程的大牛一般都会,所以准确的说是贴给自己的,喜欢玩数据包的朋友...
  • 接口名、ip、子网掩码、MAC通过ioctl接口获得,网关通过执行route指令,查询内核路由表获得: #include <stdio.h> #include <string.h> #include <unistd.h> #include <net/if.h> #include ...
  • pc机取得并修改armlinux IP地址 网关 子网掩码 主机名等信息(一)获取1、当pc发送广播,armlinux收到广播信息时,向客户端发送确认信息 客户端可通过socket取出IP地址 2、当pc机发送请求取得上述信息参数时,执行...
  • 怎么在linux和windows下分别怎么设置与获取IP地址、网关地址、子网掩码有提供API函数吗? 请大牛们 告诉我。。 通过调用系统命令的 就不需要回答了! ...我是新手没什么分。谢谢了
  • 二 虚拟机上配置好在安装linux系统 三 知识回顾  交换机:主机在局域网内的身份是MAC地址(可以通过【交换机广播:交换机通过被动学习来建立一张“接口号”和“MAC地址”的对照表】或者 【ARP协议获取:解析公网ip...
  • # This is a script to gather network information of your Linux system. # Test under Ubuntu 10.04 only. #---------------------------- NIC=eth0 MAC=`LANG=C ifconfig $NIC | awk '/HWaddr/{ print $5 }' ` ...
  • @[toc]一、查看IP地址1、ifconfig命令ifconfig是Linux查看和配置网卡的命令,上图中,我们重点关注五方面信息:1)网卡名:即网卡设备名,lo是本机(全称loopback,是回环地址,经常被分配到127.0.0.1地址上,用于...
  • <br />(一)获取 1、当pc发送广播,arm linux收到广播信息时,向客户端发送确认信息  客户端可通过socket取出IP地址   2、当pc机发送请求取得上述信息参数时,执行以下系统调用 ...
  • 网络协议从入门到底层原理 MAC地址(40-55-82-0A-8C-6D) MAC地址的表示格式(Windows、Linux) MAC地址操作(ipconfig /all) MAC地址的获取(arp -a) ARP(Address Resolution Protocol) ...子网掩码的CIDR表示
  • Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息。 ioctl 首先看ioctl()用法 ioctl()原型如下: #include <sys/ioctl.h> int ioctl(int fd, int ...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 244
精华内容 97
关键字:

linux获取子网掩码

linux 订阅