使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换
2017-09-11 13:53
691 查看
问题背景:
我在提取网络层数据时需要进行IP地址到点十分地址的时候使用inet_ntoa函数进行输出转换,但是我在同一个输出里面调用inet_ntoa分别对源IP和目的IP进行转换时输出的结果是一样的。我保证了我的源IP和目的IP是不同的,结果却让我很诧异
解决方案:
1.将inet_ntoa的数据复制出来保存使用
2.使用inet_ntop函数指定参数进行转换
我在提取网络层数据时需要进行IP地址到点十分地址的时候使用inet_ntoa函数进行输出转换,但是我在同一个输出里面调用inet_ntoa分别对源IP和目的IP进行转换时输出的结果是一样的。我保证了我的源IP和目的IP是不同的,结果却让我很诧异
printf("%s,%s",inet_ntoa(addr[0]),inet_ntoa(addr[1])); //输出结果 192.168.17.2, 192.168.17.2后来查找资料发现,inet_ntoa的结果是保存在静态内存当中的,上面的输出代码返回的是同一个栈的数据,后面一个inet_ntoa会将前一个的数据进行覆盖导致数据错误。
解决方案:
1.将inet_ntoa的数据复制出来保存使用
2.使用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);样例(来源百度百科):
#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); }
相关文章推荐
- 网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 地址转换函数inet_aton、 inet_ntoa、 inet_addr和inet_pton 、inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 备忘----创建套接字进行地址和端口进行网络序转换时使用ipv4和ipv6都通用的函数
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
- linux下inet_ntoa(包括inet_ntop)和printf的使用问题
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton
- 【收藏】使用网络地址转换 增强网络安全
- 使用网络地址转换实现多服务器负载均衡
- 网络地址格式转换工具--netmask的使用