设为首页 收藏本站
查看: 2228|回复: 0

[经验分享] inet_ntop,inet_pton(替代inet_aton等)

[复制链接]

尚未签到

发表于 2015-11-23 15:21:31 | 显示全部楼层 |阅读模式
  http://beej.us/guide/bgnet/output/html/multipage/inet_ntopman.html
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);
inet_pton (AF_INET或AF_INET6,支持IPV6,可重入!!!
       const char *inet_ntop(int af, const void *src,-------这样可以支持多种结构体。
                             char *dst, socklen_t cnt);
       成功,返回指向dst的非空指针;失败,返回Null

/* Structure describing an Internet (IP) socket address. */
#define __SOCK_SIZE__ 16/* sizeof(struct sockaddr)*/
struct sockaddr_in {
  __kernel_sa_family_t sin_family;/* Address family*/
  __be16 sin_port;/* Port number*/
  struct in_addr sin_addr; /* Internet address*/ ------ 使用!


  /* Pad to size of `struct sockaddr'. */
  unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};

The maximum lengths are: INET_ADDRSTRLEN and INET6_ADDRSTRLEN.

// IPv4 demo of inet_ntop() and inet_pton()
struct sockaddr_in sa;
char str[INET_ADDRSTRLEN];
// store this IP address in sa:
inet_pton(AF_INET, &quot;192.0.2.33&quot;, &(sa.sin_addr));
// now get it back and print it
inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN);
printf(&quot;%s\n&quot;, str); // prints &quot;192.0.2.33&quot;


http://beej.us/guide/bgnet/output/html/multipage/inet_ntoaman.html
因为只支持IPv4,下面的API已淘汰:
       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>
       struct in_addr {
                      unsigned long int s_addr;
              }

       int inet_aton(const char *cp, struct in_addr *inp);
       in_addr_t inet_addr(const char *cp); --- 返回的整数形式是网络字节序;被 inet_aton淘汰,因为出错时返回-1;而cp为“255.255.255.255”时也返回-1。
       in_addr_t inet_network(const char *cp); --- 返回的整数形式是主机字节序; 被 inet_aton淘汰,原因同上。
       char *inet_ntoa(struct in_addr in); --- 返回静态空间,非线程安全
       struct in_addr inet_makeaddr(int net, int host);
       in_addr_t inet_lnaof(struct in_addr in);
       in_addr_t inet_netof(struct in_addr in);
For example, inet_aton(&quot;226.000.000.037&quot;, &t) will interpret the address as 226.0.0.31 and not 226.0.0.37.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-142749-1-1.html 上篇帖子: Ntop + netflow 功能的实现 下篇帖子: snort-inline和snort+ntop+swatch
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表