Linux下C编程实现---获取本机IP地址
来源:互联网 发布:jdk1.7源码下载 官方 编辑:程序博客网 时间:2024/04/29 21:55
在LINUX下,如果需要获取本机的IP地址,需要用到以下一个结构体,该结构体在/usr/include/net/if.h文件中
struct ifreq {# define IFHWADDRLEN 6# define IFNAMSIZ IF_NAMESIZE union { char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short int ifru_flags; int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[IFNAMSIZ]; /* Just fits the size */ char ifru_newname[IFNAMSIZ]; __caddr_t ifru_data; } ifr_ifru; };# define ifr_name ifr_ifrn.ifrn_name /* interface name */# define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */# define ifr_addr ifr_ifru.ifru_addr /* address */# define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */# define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */# define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */# define ifr_flags ifr_ifru.ifru_flags /* flags */# define ifr_metric ifr_ifru.ifru_ivalue /* metric */# define ifr_mtu ifr_ifru.ifru_mtu /* mtu */# define ifr_map ifr_ifru.ifru_map /* device map */# define ifr_slave ifr_ifru.ifru_slave /* slave device */# define ifr_data ifr_ifru.ifru_data /* for use by interface */# define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */# define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */# define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */# define ifr_newname ifr_ifru.ifru_newname /* New name */# define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)# define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)# define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
从这个结构体,你可以看到ifr_addr就是我们要获取的IP地址,于是编程实现如下
#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <net/if.h>#include <sys/ioctl.h>#define IF_NAME "eth0"int get_local_ip(char * ifname, char * ip){ char *temp = NULL; int inet_sock; struct ifreq ifr; inet_sock = socket(AF_INET, SOCK_DGRAM, 0); memset(ifr.ifr_name, 0, sizeof(ifr.ifr_name)); memcpy(ifr.ifr_name, ifname, strlen(ifname)); if(0 != ioctl(inet_sock, SIOCGIFADDR, &ifr)) { perror("ioctl error"); return -1; } temp = inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr); memcpy(ip, temp, strlen(temp)); close(inet_sock); return 0;}int main(void){ char ip[32] = {0}; get_local_ip(IF_NAME, ip); if(0 != strcmp(ip, "")) printf("%s ip is %s\n",IF_NAME, ip); return 0;}
0 0
- Linux下C编程实现---获取本机IP地址
- linux编程--c代码获取本机IP地址
- linux编程--c代码获取本机IP地址
- Linux下C语言获取本机IP地址
- linux下c语言获取本机ip地址
- linux编程获取本机IP地址
- linux编程获取本机IP地址
- linux编程获取本机IP地址
- Linux编程获取本机IP地址
- linux编程获取本机IP地址
- linux编程获取本机IP地址
- linux编程获取本机IP地址
- 获取本机IP地址 linux c
- linux下获取本机IP地址
- LINUX下获取本机IP地址
- Linux下获取本机IP地址
- linux下 获取本机ip地址和掩码地址
- linux下 获取本机ip地址和掩码地址
- 11Oil Deposits
- Linux压缩保留源文件的方法
- Java的断言
- FileReader用法
- 基于SSH编写通用的DAO、Service、Action
- Linux下C编程实现---获取本机IP地址
- 2016.04.01-2016.04.04回顾
- cocoaPods的安装和使用
- 常用开发工具
- STM32F103C8T6 IAP程序
- proj4投影库的使用与安装
- 在CentOS/RHEL上设置SSH免密码登录
- Qt Windows 7(Win7)下获取并显示电池电量和WIFI信号强度
- 通配符配置的很全面,但是无法找到context:compoennt-scan