linux c++获取当前使用的网络的ip 、mac、mask
时间: 2023-12-04 17:01:54 浏览: 50
获取当前使用的网络的IP地址可以通过调用Linux系统的socket函数库实现。具体代码如下:
```cpp
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int main() {
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
printf("IP Address is %s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
return 0;
}
```
其中,`ifr.ifr_name` 表示网卡的名称,可以根据实际情况修改,例如 `eth0`、`wlan0` 等。`inet_ntoa` 函数将网络字节序的IP地址转换为点分十进制表示的字符串。
获取当前使用的网络的MAC地址和掩码同样可以通过调用Linux系统的socket函数库实现。具体代码如下:
```cpp
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int main() {
int fd;
struct ifreq ifr;
// 获取MAC地址
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFHWADDR, &ifr);
close(fd);
printf("MAC Address is %02x:%02x:%02x:%02x:%02x:%02x\n",
(unsigned char)ifr.ifr_hwaddr.sa_data[0],
(unsigned char)ifr.ifr_hwaddr.sa_data[1],
(unsigned char)ifr.ifr_hwaddr.sa_data[2],
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);
// 获取掩码
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
ioctl(fd, SIOCGIFNETMASK, &ifr);
close(fd);
printf("Netmask is %s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_netmask)->sin_addr));
return 0;
}
```
其中,`SIOCGIFHWADDR` 表示获取MAC地址,`SIOCGIFNETMASK` 表示获取掩码。`ifr.ifr_hwaddr` 表示MAC地址,`ifr.ifr_netmask` 表示掩码。利用 `sa_data` 成员变量可以获取MAC地址的每一位,利用 `inet_ntoa` 函数将网络字节序的掩码转换为点分十进制表示的字符串。