inet_pton、inet_ntop

2023-12-01 18:58
文章标签 inet ntop pton

本文主要是介绍inet_pton、inet_ntop,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换
而且,inet_pton和inet_ntop这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);
}

这篇关于inet_pton、inet_ntop的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442318

相关文章

ACE基本APISOCKET编程TCPACE_INET_Addr类ACE_SOCK_Acceptor类ACE_SOCK_Connector类ACE_SOCK_Stream

Tcp通信过程一般为如下步骤:1. 服务器绑定端口,等待客户端连接。2. 客户端通过服务器的ip和服务器绑定的端口连接服务器。3. 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。 常用API:1. ACE—INET_Addr 类。ACE"地址"类ACE_Addr的子类,表示TCP/IP和UDP/IP的地址。它通常包含机器的ip和端口信息,通过它可以定位到所通信的

网络字节转换inet_aton inet_ntoa inet_addr和inet_pton

 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton 分类: LINUX inet_aton,inet_addr 和 inet_ntoa 在点分十进制数串(如, “192.168.1.10") 与他的 32 位网络字节二进制值之前转换 IPV4 地址,有 2 个比较新的函数 inet_pton 和 inet_ntop ,这 2

Linux: network:socket: inet_csk_bind_conflict相关的一个改进建议

内核在分配临时端口的时候,会使用一个hash bucket存放同一端口,在reuse的情况下所有socket。在下一次选择端口的时候,会做根据fastreuse的情况,来判断是否做conflict检查。这里有一个问题:https://mzhan017.blog.csdn.net/article/details/137108073。 其实可以加一个内核参数来控制,在选择下一个临时端口的时候,是否要找

inet_addr函数处理IP地址需要注意的问题

inet_addr函数处理IP地址需要注意的问题 2007-01-26 12:01 现在我们很幸运,因为我们有很多的函数来方便地操作 IP 地址。没有 必要用手工计算它们,也没有必要用"<<"操作来储存成长整字型。  首先,假设你已经有了一个sockaddr_in结构体ina,你有一个IP地址"132.241.5.10" 要储存在其中,你就要用到函数inet_addr(),将IP地

Linux: network: 内核里的一个隐匿陷阱 inet_csk_bind_conflict

最近和同事一块看一个问题,内核版本4.18。总结如下: 说有一个函数是inet_csk_bind_conflict,如果只是普通socket的应用,socket数量不多,可能用不到这个函数,或者用到了也感知不到。 但是最近就遇到了一个问题,说应用在一个端口建立起来了tons of sockets,来对外链接, 这个时候就有可能出现问题,而且使用的这个端口,还是一个临时的端口,在net.ipv4.i

htons/ntohs、inet_aton/inet_ntoa、inet_pton/inet_ntop函数详解

在介绍htons等函数之前,必须先介绍网络字节序与主机字节序 网络字节序和主机字节序 网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。 主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。 主机字节序就是我们平常

使用ntop来做流量监控

使用ntop来做流量监控 先来安装ntop,ntop需要使用一个web服务器,所以我在这里使用的apache,一起安装了吧命令如下 jonsk:~# apt-get install ntop apache 需要安装22个包 apache、 apache-common 、apache2-utils、libapr1、libaprutil1 、libexpat1、libfreetype6

VMware虚拟机系统网络通信失败ifconfig显示UP BROADCAST MULTICAST没有inet地址修复笔记

今天像往常一样ssh连接装在本地VMware里的虚拟机系统,竟然突然连接不上。去主机里面一看,ifconfig的结果怪怪的,没有显示inet地址等信息,却打印出一句“UP BROADCAST MULTICAST”。 root@ubuntu:~# ifconfigens33 Link encap:以太网 硬件地址 00:0c:29:b5:aa:8c UP BROADCAST MULT

inet_ntoa之坑------再谈不可重入函数中的static

不想用过多的话语来啰嗦, 还是看代码吧(如下结果非常让人吃惊): #include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>int main(){unsigned long n1 = inet_addr("10.213

IP处理函数inet_aton()和inet_ntoa()

MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地址: 192.168.33.123 每一个值最大不会越过255,也就是十六进制的FF,两个Byte刚好表示的最大值是255, 这样子,就可以用一个32位的整形来保存这个地址 192            168          33           123