在Linux系统下,可以使用C语言编写程序来获取本机的IP地址和子网掩码。以下是一个示例程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <string.h>
int main() {
int sockfd;
struct ifreq ifr;
// 创建套接字
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket");
exit(1);
}
// 获取接口名称
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ - 1);
// 获取IP地址
if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) {
perror("ioctl");
close(sockfd);
exit(1);
}
struct sockaddr_in* addr = (struct sockaddr_in*)&(ifr.ifr_addr);
char ip_address[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr->sin_addr), ip_address, INET_ADDRSTRLEN);
printf("IP Address: %s\n", ip_address);
// 获取子网掩码
if (ioctl(sockfd, SIOCGIFNETMASK, &ifr) < 0) {
perror("ioctl");
close(sockfd);
exit(1);
}
addr = (struct sockaddr_in*)&(ifr.ifr_netmask);
char netmask[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr->sin_addr), netmask, INET_ADDRSTRLEN);
printf("Netmask: %s\n", netmask);
// 关闭套接字
close(sockfd);
return 0;
}
该程序使用了Linux下的套接字和IO控制相关的系统调用和库函数来获取本机的IP地址和子网掩码。
需要注意的是,代码中的接口名称为"eth0",你可以根据实际情况修改为你的网络接口名称。在程序中,我们使用 ioctl
函数进行控制操作,通过 SIOCGIFADDR
获取IP地址,通过 SIOCGIFNETMASK
获取子网掩码。