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
- linux下C编程_获取指定网卡IP信息
- Linux下获取网卡信息
- linux 下C实现获取网卡IP和MAC地址
- linux下获取网卡IP的C/C++代码
- linux编程获取本机网卡信息
- python3 linux 下获取本地网卡ip
- linux c获取系统网卡信息
- Linux下如何获取网卡信息
- Linux下如何获取网卡信息
- Linux下获取多网卡信息
- Linux下获取所有可用网卡信息
- Linux下获取所有可用网卡信息
- Linux下获取所有可用网卡信息
- Linux下如何获取网卡信息
- [VC++]编程获取系统网卡列表及IP地址信息
- linux网络编程之:获取指定网卡网络数据包并分析(附C语言源码)
- Linux下C编程实现---获取本机IP地址
- Linux 获取网卡信息
- SQL Server 数据库巡检脚本
- 便携式医疗设备中的信号调整
- Flex 传参数到 javaWeb 汉字乱码解决方案
- osgEarth 基础知识点
- Android UI设计交流论坛地址
- linux下C编程_获取指定网卡IP信息
- Git 指令大全
- 查找二:B树、Tril树
- Handler的使用(一)
- 五子棋
- 韭菜泡脚可有效治脚气 三次即可除根
- 软件开发的43款可视化工具
- 这是一篇蹭分贴
- centOS ssh配置