`
fp_moon
  • 浏览: 982983 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

inet_ntop与inet_pton

阅读更多

inet_ntop与inet_pton

Linux下inet_pton和inet_ntop这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换。而且,这2个函数能够处理ipv4和

ipv6。算是比较新的函数了。   
inet_pton函数原型如下[将“点分十进制” -> “整数”]   
#include <sys/types.h>   #include <sys/socket.h>   
#include <arpa/inet.h>   
int inet_pton(int af, const char *src, void *dst);   
这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中。   
inet_pton 是inet_addr的扩展,支持的多地址族有下列:   
af = AF_INET  src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址   
转换为in_addr的结构体,并复制在*dst中。   
af =AF_INET6   
src若为指向IPV6的地址,函数将该地址转换为in6_addr的结构体,并复制在*dst中。   
如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。   
inet_ntop函数原型如下[将“整数” -> “点分十进制”]   
#include <sys/types.h>   
#include <sys/socket.h>   
#include <arpa/inet.h>   
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);   
这个函数转换网络二进制结构到ASCII类型的地址,参数的作用和上面相同,只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC。   
下面是例程:   
#include <stdio.h>   
#include <stdlib.h>   
#include <string.h>   
#include <unistd.h>   
#include <sys/socket.h>   
#include <netinet/in.h>   
int main (void)   
{   
  char IPdotdec[20]; //存放点分十进制IP地址   
  struct in_addr s; // IPv4地址结构体   
  // 输入IP地址   
  printf("Please input IP address: ");   
  scanf("%s", &IPdotdec);   
  // 转换  inet_pton(AF_INET, IPdotdec, (void *)&s);   
  printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序   
  // 反转换     inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);   
  printf("inet_ntop: %s\n", IPdotdec);   }   

例程2;   
#include <stdio.h> #include <stdlib.h>   
#include <netinet/in.h>   
int main(void)   
{   
  char addr_p[16]; /*IP地址的点分十进制字符串表示形式*/   
  struct in_addr addr_n;/*IP地址的二进制表示形式*/   
  if(inet_pton(AF_INET,"192.168.11.6",&addr_n)<0)/*地址由字符串转换为二级制数*/   
  {   
    perror("fail to convert");   
    exit(1);   
   }   
  printf("address:%x\n",addr_n);/*打印地址的16进制形式*/
  
  if(inet_ntop(AF_INET,&addr_n,addr_p,(socklen_t *)sizeof(addr_p))==NULL) /*地址由二进制数转换为点分十进制*/   
  {       perror("fail to convert");   
    exit(1);   
  }   
  printf("address:%s\n",addr_p);/*打印地址的点分十进制形式*/   
  return 0;  
}
出错检查:
inet_pton函数成功的话返回1,参数无效返回0,错误返回-1;   
inet_ntop函数成功的话返回字符串的首地址,错误返回NULL;

分享到:
评论

相关推荐

    详解inet_pton()和inet_ntop()函数

    inet_pton()和inet_ntop()函数就提供了这样的功能,它们是处理IPv4和IPv6地址转换的现代网络编程函数。 inet_pton() 函数用于将点分十进制格式的IP地址转换为用于网络传输的二进制数值。该函数可以处理IPv4和IPv6...

    浅析PHP中的 inet_pton 网络函数

    `inet_pton`函数的伙伴函数是`inet_ntop`,它的作用是将二进制格式的IP地址转换回点分十进制或冒号十六进制表示。这两个函数一起使用,可以在处理IP地址时进行灵活的转换。 在实际应用中,`inet_pton`常用于网络...

    inet各种函数.pdf

    《inet函数详解:inet_pton与inet_ntop的使用及inet_aton的介绍》 在互联网编程中,处理IP地址的转换是一项常见的任务。本文将详细介绍Linux环境下inet_pton、inet_ntop以及inet_aton这三个函数,它们是用于在点分...

    inet各种函数.docx

    不过,与`inet_pton`不同,`inet_aton`不设置`errno`,因此其返回值是唯一的错误指示。 `inet_ntoa`函数则是一个反向的转换函数,将32位网络字节序的IPv4地址转换为点分十进制字符串。函数原型如下: ```c char* ...

    网络编程学习一:IP地址转换函数.docx

    2. `inet_ntop(int af, const void* src, char* dst, socklen_t cnt)`:与`inet_pton`类似,但这个函数将二进制地址转换为字符串形式。`dst`是一个缓冲区,用于存储转换后的字符串,`cnt`是缓冲区的大小。对于IPv4,...

    address_WinSock编程_

    分别利用函数 inet_addr、inet_pton ,将“字符串”192.168.12.13“转化位4字节整型数。分别利用函数 inet_ntoa 、inet...利用函数inet_pton、inet_ntop,将&quot;2001:3211::1&quot; 转换位IPV6地址,并转换字符串输出

    Unix网络编程API.doc

    在实际编程中,这些函数结合使用,例如,`readn`和`writen`用于网络套接字间的可靠数据传输,`inet_pton`和`inet_ntop`用于处理IP地址的字符串和二进制形式,而字节序转换函数确保数据在网络上的正确表示。...

    网络结构体资料.pdf

    `inet_pton`接受地址族(如AF_INET或AF_INET6)、源字符串和目标缓冲区,而`inet_ntop`接收同样的地址族、网络地址和目标字符串缓冲区。 在网络编程中,理解和正确使用这些结构体和函数是建立可靠网络连接的基础。...

    ip地址转换.docx

    在上面的示例代码中,我们使用了 inet_pton 函数将点分十进制表示的 IP 地址转换为二进制表示,并使用 inet_ntop 函数将二进制表示的 IP 地址转换为点分十进制表示。这两个函数都需要包含 `&lt;arpa/inet.h&gt;` 头文件。 ...

    通过IP获取主机的名字

    if (inet_pton(AF_INET, argv[1], &addr) ) { perror("inet_pton"); return 1; } struct hostent *host_entry = gethostbyaddr((const void *)&addr, sizeof(addr), AF_INET); if (host_entry == NULL) { ...

    linux网络编程常用函数[参照].pdf

    - `inet_pton()` 和 `inet_ntop()` 分别用于将IP地址字符串转换为二进制形式,以及从二进制形式转换为字符串。这两个函数支持IPv4和IPv6,并且比`inet_aton()`和`inet_ntoa()`更安全,不会导致内存问题。 4. **...

    socket IOS

    4. **IPv4/IPv6通用地址转换函数**:`inet_pton()`和`inet_ntop()`函数是更现代的地址转换方式,它们支持IPv4和IPv6。`inet_pton()`将地址字符串转换为二进制格式,`inet_ntop()`则执行相反的操作。 5. **TCP套接口...

    socket 编程基础(网络编程)思维导图-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

    socket编程是一种在Linux下的进程间通信机制,用于不同主机上或同一主机上应用程序之间的通信。它通常采用客户端与服务器的模式进行通信,多个客户端可以同时...IP地址格式转换可使用inet_ntop()和inet_pton()函数.....

    PHP实现IP–数字互相转换

    在实际工作中,可能会遇到更复杂的情况,比如处理IPv6地址,这时可能需要使用`inet_pton()`和`inet_ntop()`函数,或者使用`filter_var()`函数配合`FILTER_VALIDATE_IP`选项来验证和转换IP地址。总的来说,理解并运用...

    linux网络编程常用函数.pdf

    - `inet_pton` 和 `inet_ntop` 提供了更安全的IP地址转换方式,支持IPv4和IPv6,返回值指示成功或失败,并且可以处理错误情况。它们需要指定地址族(如AF_INET或AF_INET6)和目标缓冲区大小。 4. **readn、writen ...

    unix网络编程英文版第三版pdf

    - **inet_pton和inet_ntop函数**:介绍了更安全、通用的版本,用于将点分十进制IP地址字符串转换为二进制形式,或反之亦然。 - **sock_ntop及其相关函数**:描述了如何将Socket地址结构转换为易于阅读的形式。 - ...

    phpIP地址查询

    - `inet_pton()` 和 `inet_ntop()`:这两个函数用于在IP地址和二进制表示之间进行转换。`inet_pton()` 把IPv4或IPv6的地址转换成二进制形式,而 `inet_ntop()` 反之。 4. **地理位置信息查询**: - 使用第三方...

    UNIX网络API函数

    - `int inet_pton(int family, const char* strptr, void* addrptr);` - **inet_ntop()**: 将结构化的IP地址转换为字符串表示。 - `const char* inet_ntop(int family, const void* addrptr, char* strptr, size_...

Global site tag (gtag.js) - Google Analytics