一 代码
#include <string.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{ int inet_sock; struct ifreq ifr; //定义网口请求结构体inet_sock = socket(AF_INET, SOCK_DGRAM, 0); strcpy(ifr.ifr_name, "enp0s3"); //SIOCGIFADDR标志代表获取接口地址 if (ioctl(inet_sock, SIOCGIFADDR, &ifr) < 0) perror("ioctl"); printf("%sn", inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr)); return 0;
}
二 运行
[root@localhost test]# g++ test.cpp -o test
[root@localhost test]# ./test
192.168.0.110
三 说明
1 ifreq结构体定义
Struct ifreq{
Char ifr_name[IFNAMSIZ];
Union{Struct sockaddr ifru_addr;Struct sockaddr ifru_dstaddr;Struct sockaddr ifru_broadaddr;Struct sockaddr ifru_netmask;Struct sockaddr ifru_hwaddr;Short ifru_flags;Int ifru_metric;Caddr_t ifru_data;
}ifr_ifru;
};
#define ifr_addr ifr_ifru.ifru_addr
#define ifr_broadaddr ifr_ifru.ifru_broadadd
#define ifr_hwaddr ifr_ifru_hwaddr
2 网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示
接口 | SIOCGIFCONF SIOCSIFADDR SIOCGIFADDR SIOCSIFBRDADDR SIOCGIFBRDADDR SIOCSIFNETMASK SIOCGIFNETMASK | 获取所有接口列表 设置接口地址 获取接口地址 设置广播地址 获取广播地址 设置子网掩码 获取子网掩码 | Struct ifconf Struct ifreq Struct ifreq Struct ifreq Struct ifreq Struct ifreq Struct ifreq |
四 参考
本文发布于:2024-02-04 12:03:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170706765555392.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |