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()函数就提供了这样的功能,它们是处理IPv4和IPv6地址转换的现代网络编程函数。 inet_pton() 函数用于将点分十进制格式的IP地址转换为用于网络传输的二进制数值。该函数可以处理IPv4和IPv6...
`inet_pton`函数的伙伴函数是`inet_ntop`,它的作用是将二进制格式的IP地址转换回点分十进制或冒号十六进制表示。这两个函数一起使用,可以在处理IP地址时进行灵活的转换。 在实际应用中,`inet_pton`常用于网络...
《inet函数详解:inet_pton与inet_ntop的使用及inet_aton的介绍》 在互联网编程中,处理IP地址的转换是一项常见的任务。本文将详细介绍Linux环境下inet_pton、inet_ntop以及inet_aton这三个函数,它们是用于在点分...
不过,与`inet_pton`不同,`inet_aton`不设置`errno`,因此其返回值是唯一的错误指示。 `inet_ntoa`函数则是一个反向的转换函数,将32位网络字节序的IPv4地址转换为点分十进制字符串。函数原型如下: ```c char* ...
2. `inet_ntop(int af, const void* src, char* dst, socklen_t cnt)`:与`inet_pton`类似,但这个函数将二进制地址转换为字符串形式。`dst`是一个缓冲区,用于存储转换后的字符串,`cnt`是缓冲区的大小。对于IPv4,...
分别利用函数 inet_addr、inet_pton ,将“字符串”192.168.12.13“转化位4字节整型数。分别利用函数 inet_ntoa 、inet...利用函数inet_pton、inet_ntop,将"2001:3211::1" 转换位IPV6地址,并转换字符串输出
在实际编程中,这些函数结合使用,例如,`readn`和`writen`用于网络套接字间的可靠数据传输,`inet_pton`和`inet_ntop`用于处理IP地址的字符串和二进制形式,而字节序转换函数确保数据在网络上的正确表示。...
`inet_pton`接受地址族(如AF_INET或AF_INET6)、源字符串和目标缓冲区,而`inet_ntop`接收同样的地址族、网络地址和目标字符串缓冲区。 在网络编程中,理解和正确使用这些结构体和函数是建立可靠网络连接的基础。...
在上面的示例代码中,我们使用了 inet_pton 函数将点分十进制表示的 IP 地址转换为二进制表示,并使用 inet_ntop 函数将二进制表示的 IP 地址转换为点分十进制表示。这两个函数都需要包含 `<arpa/inet.h>` 头文件。 ...
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) { ...
- `inet_pton()` 和 `inet_ntop()` 分别用于将IP地址字符串转换为二进制形式,以及从二进制形式转换为字符串。这两个函数支持IPv4和IPv6,并且比`inet_aton()`和`inet_ntoa()`更安全,不会导致内存问题。 4. **...
4. **IPv4/IPv6通用地址转换函数**:`inet_pton()`和`inet_ntop()`函数是更现代的地址转换方式,它们支持IPv4和IPv6。`inet_pton()`将地址字符串转换为二进制格式,`inet_ntop()`则执行相反的操作。 5. **TCP套接口...
socket编程是一种在Linux下的进程间通信机制,用于不同主机上或同一主机上应用程序之间的通信。它通常采用客户端与服务器的模式进行通信,多个客户端可以同时...IP地址格式转换可使用inet_ntop()和inet_pton()函数.....
在实际工作中,可能会遇到更复杂的情况,比如处理IPv6地址,这时可能需要使用`inet_pton()`和`inet_ntop()`函数,或者使用`filter_var()`函数配合`FILTER_VALIDATE_IP`选项来验证和转换IP地址。总的来说,理解并运用...
- `inet_pton` 和 `inet_ntop` 提供了更安全的IP地址转换方式,支持IPv4和IPv6,返回值指示成功或失败,并且可以处理错误情况。它们需要指定地址族(如AF_INET或AF_INET6)和目标缓冲区大小。 4. **readn、writen ...
- **inet_pton和inet_ntop函数**:介绍了更安全、通用的版本,用于将点分十进制IP地址字符串转换为二进制形式,或反之亦然。 - **sock_ntop及其相关函数**:描述了如何将Socket地址结构转换为易于阅读的形式。 - ...
- `inet_pton()` 和 `inet_ntop()`:这两个函数用于在IP地址和二进制表示之间进行转换。`inet_pton()` 把IPv4或IPv6的地址转换成二进制形式,而 `inet_ntop()` 反之。 4. **地理位置信息查询**: - 使用第三方...
- `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_...