linux下C编程_获取指定网卡IP信息

来源:互联网 发布:晓组织衣服淘宝 编辑:程序博客网 时间:2024/06/10 17:13

自己实现的,不一定通用,其实就是从 ifconfig 结果里面提取信息

# ifconfigeth0      Link encap:Ethernet  HWaddr 00:03:AD:BC:CC:5A          inet addr:192.168.100.238  Bcast:192.168.100.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:5089 errors:0 dropped:0 overruns:0 frame:0          TX packets:604 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:1226762 (1.1 MiB)  TX bytes:60168 (58.7 KiB)lo        Link encap:Local Loopback          inet addr:127.0.0.1  Mask:255.0.0.0          UP LOOPBACK RUNNING  MTU:16436  Metric:1          RX packets:275 errors:0 dropped:0 overruns:0 frame:0          TX packets:275 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:12172 (11.8 KiB)  TX bytes:12172 (11.8 KiB)

  23 #define NET_NAME        "eth0"  24 #define NET_INFO_LEN    20  25 #define IFCONFIG_CMD    "ifconfig"  26 #define NET_INFO_BUFF_SIZE 350  93 /*  94 *       本地网络信息  95 */  96 struct Network {  97         char ipaddr[NET_INFO_LEN];      /* IP地址 */  98         char mask[NET_INFO_LEN];        /* 子网掩码 */  99         char gateway[NET_INFO_LEN];     /* 网关 */ 100         char mac[NET_INFO_LEN];         /* MAC地址*/ 101 };17211722 /*1723 *       获取本机IP地址 eth0网卡1724 */1725 int get_net_info(struct Network *netinfo)1726 {1727         /* 待搜索网卡名称 */1728         char network_name[READ_BUFF_SIZE] = NET_NAME;1729         char net_info[NET_INFO_BUFF_SIZE] = {0};1730         char temp[READ_BUFF_SIZE] = {0};1731         char read_tmp[READ_BUFF_SIZE] = {0};1732         FILE *fp = NULL;1733         int i = 0;1734         int j = 0;1735 #if 11736         fp = popen(IFCONFIG_CMD, "r");1737         if (fp == NULL) {1738                 dbg_out(DBG_ERR, "popen failed\n");1739                 return -1;1740         } else {1741                 /* 开始解析 */1742                 if (fread(net_info, sizeof(char), sizeof(net_info), fp) != sizeof(net_info)) {1743                         dbg_out(DBG_ERR, "fread %s failed\n", net_info);1744                         pclose(fp);1745                         return -1;1746                 }1747                 pclose(fp);17481749                 /* 匹配网卡名称 */1750                 strncpy(temp, net_info, strlen(network_name));1751                 if (strcmp(temp, network_name) != 0) {1752                         return -1;1753                 }1754                 i = i + strlen(network_name);17551756                 /* 物理地址 HWaddr */1757                 memset(read_tmp, 0, sizeof(read_tmp));1758                 memset(temp, 0, sizeof(temp));1759                 strcat(temp, "HWaddr ");1760                 while (net_info[i] != '\0') {1761                         /* 查找"HWaddr "*/1762                         if (net_info[i] != 'H') {1763                                 i++;1764                                 continue;1765                         }1766                         for (j=0; j<strlen(temp); j++) {1767                                 read_tmp[j] = net_info[i];1768                                 i++;1769                         }17701771                         /* 相等则拷贝 */1772                         if (!strcmp(temp, read_tmp)) {1773                                 for (j=0; j<17; j++) {  /* mac 固定长度 */1774                                         netinfo->mac[j] = net_info[i];1775                                         i++;1776                                 }1777                                 netinfo->mac[j] = '\0';1778                                 break;1779                         } else {1780                                 dbg_out(DBG_INFO, "find \"HWADDR \" failed\n");1781                                 return -1;1782                         }1783                 }1784                 dbg_out(DBG_INFO, "MAC: %s\n", netinfo->mac);1785                 dbg_out(DBG_INFO, "MAC len: %d\n", strlen(netinfo->mac));17861787                 /* ip地址 inet addr: */1788                 memset(read_tmp, 0, sizeof(read_tmp));1789                 memset(temp, 0, sizeof(temp));1790                 strcat(temp, "inet addr:");1791                 while (net_info[i] != '\0') {1792                         /* 查找 i */1793                         if (net_info[i] != 'i') {1794                                 i++;1795                                 continue;1796                         }1797                         for (j=0; j<strlen(temp); j++) {1798                                 read_tmp[j] = net_info[i];1799                                 i++;1800                         }18011802                         /* 相等则拷贝 */1803                         if (!strcmp(temp, read_tmp)) {1804                                 j = 0;1805                                 while (net_info[i] != ' ') {1806                                         netinfo->ipaddr[j] = net_info[i];1807                                         i++;1808                                         j++;1809                                 }1810                                 netinfo->ipaddr[j] = '\0';1811                                 break;1812                         } else {1813                                 dbg_out(DBG_INFO, "find \"ipaddr\" failed\n");1814                                 return -1;1815                         }1816                 }1817                 dbg_out(DBG_INFO, "ip: %s\n", netinfo->ipaddr);1818                 dbg_out(DBG_INFO, "ip len: %d\n", strlen(netinfo->ipaddr));18191820                 /* Bcast: */1821                 memset(read_tmp, 0, sizeof(read_tmp));1822                 memset(temp, 0, sizeof(temp));1823                 strcat(temp, "Bcast:");1824                 while (net_info[i] != '\0') {1825                         /* 查找 B */1826                         if (net_info[i] != 'B') {1827                                 i++;1828                                 continue;1829                         }1830                         for (j=0; j<strlen(temp); j++) {1831                                 read_tmp[j] = net_info[i];1832                                 i++;1833                         }18341835                         /* 相等则拷贝 */1836                         if (!strcmp(temp, read_tmp)) {1837                                 j = 0;1838                                 while (net_info[i] != ' ') {1839                                         netinfo->gateway[j] = net_info[i];1840                                         i++;1841                                         j++;1842                                 }1843                                 netinfo->gateway[j] = '\0';1844                                 break;1845                         } else {1846                                 dbg_out(DBG_INFO, "find \"gateway\" failed\n");1847                                 return -1;1848                         }1849                 }1850                 dbg_out(DBG_INFO, "Bcast: %s\n", netinfo->gateway);1851                 dbg_out(DBG_INFO, "Bcast len: %d\n", strlen(netinfo->gateway));18521853                 /* 子网掩码 Mask: */1854                 memset(read_tmp, 0, sizeof(read_tmp));1855                 memset(temp, 0, sizeof(temp));1856                 strcat(temp, "Mask:");1857                 while (net_info[i] != '\0') {1858                         /* 查找M */1859                         if (net_info[i] != 'M') {1860                                 i++;1861                                 continue;1862                         }1863                         for (j=0; j<strlen(temp); j++) {1864                                 read_tmp[j] = net_info[i];1865                                 i++;1866                         }18671868                         /* 相等则拷贝 */1869                         if (!strcmp(temp, read_tmp)) {1870                                 j = 0;1871                                 while (net_info[i] != '\n') {1872                                         netinfo->mask[j] = net_info[i];1873                                         i++;1874                                         j++;1875                                 }1876                                 netinfo->mask[j] = '\0';1877                                 break;1878                         } else {1879                                 dbg_out(DBG_INFO, "find \"mask\" failed\n");1880                                 return -1;1881                         }1882                 }1883                 dbg_out(DBG_INFO, "mask: %s\n", netinfo->mask);1884                 dbg_out(DBG_INFO, "mask len: %d\n", strlen(netinfo->mask));1885         }18861887         return 0;1888 #endif1889 }




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身上起红疙瘩水泡很痒怎么办 怀疑老公有外遇他不承认怎么办 苹果手机锁屏密码忘了怎么办 黑色t恤洗了掉毛怎么办 老婆要和我离婚我该怎么办 发现老婆有外遇最明智的怎么办 高度近视怎么办我快一千度近 天刀耐久度为0了怎么办 新车被4s店装了怎么办 h面和w面联系线怎么办 造梦西游3到80级怎么办 加95的车加了92怎么办 95的车加92的油怎么办 宝宝六个月了奶水变少了怎么办 六个月的宝宝不爱吃奶粉怎么办 脸上挤黑头留下的小坑怎么办 小孩身上起红疙瘩很痒怎么办 肛门上长了个肉疙瘩怎么办 脚撞了一下肿了怎么办u 怀孕9个月同床了怎么办 结婚两年了都没怀孕怎么办 怀孕快40周了没有生的迹象怎么办 生完小孩掉头发很厉害怎么办 我27岁欠50多万怎么办 8岁童牙齿摔松了怎么办 我的眉毛后半边很稀少怎么办 剑三95修为满了怎么办 21三体综合症临界高风险怎么办 率土之滨没地了怎么办 老公有外遇怎么办他还舍不得小三 11选5输了6万 怎么办 k宝密码忘了怎么办5次 k宝密码输错5次怎么办 上火了牙疼怎么办怎样快速止疼 身体不吸收营养胖不起来怎么办 突然牙疼怎么办教你立刻止疼 蛀牙疼怎么办教你立刻止疼 做了牙套的牙疼怎么办 牙疼怎么办教你立刻止疼 七个月宝宝便秘拉不出来怎么办 喝酒脸上起了很多小红疙瘩怎么办