写的一个小项目里遇到的inet_ntop函数
通过一个域名获得IP地址
查资料知道在网络地址信息保存在一个结构体叫做hostent
hostent成员
struct hostent
{
char *h_name; //主机名也就是所知的域名如www.baidu.com
char **h_aliases; //主机所有别名构成的字符串数组,同一IP可绑定多个域名
int h_addrtype; //主要是IPV4
int h_length; //主机IP地址长度,IPV4地址为4,IPV6地址则为16
char **h_addr_list; // 主机的ip地址,以网络字节序存储,大端模式。要打印出这个IP,需要处理一下,inet_ntop函数就可以。
}
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
这个函数作用转换网络二进制结构到ASCII类型的地址也就是:将ip网络地址转换成常用的点分十进制ip地址
af:对应hostent结构体变量h_addrtype src:对应需要转换的二进制IP dst:IP对应是十进制结果 cnt:dst长度限制
Demo:
#include<stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
int main()
{
struct hostent *host;
char str[32]={0};
char **pptr;
host = gethostbyname("www.baidu.com");
printf("%s\n",inet_ntop(host->h_addrtype,host->h_addr,str,sizeof(str)));
//host->h_addr对应一个IP可能是h_addr_list[0]
return 0;
}结果
rootroot@ubuntu:~$ ./p
61.135.169.121
一开始没有添加头文件
#include<arpa/inet.h>
出现段错误现象,添加后就正常了。
估计是C语言里有同名函数