网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)

aa

相关函数原型及参数类型:

函数原型:int inet_aton(const char *cp, struct in_addr *inp);

in_addr_t inet_addr(const char *cp);

in_addr_t inet_network(const char *cp);

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);

int inet_pton(int af, const char *src, void *dst);       inet_pton()  returns  1 on success (network address was successfully converted).  0 is returned if src does not contain a character string representing a valid network address in the specified       address family.  If af does not contain a valid address family, -1 is returned and errno is set to EAFNOSUPPORT.

参数类型:/* Internet address.  */typedef uint32_t in_addr_t;struct in_addr{    in_addr_t s_addr;};
inet_addr函数:将IPv4的点分十进制地址转换为网络字节序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>

int main(int argc, char *argv[]){    struct in_addr addr;

    if (argc != 2) {        fprintf(stderr, "%s <dotted-address>\n", argv[0]);        exit(EXIT_FAILURE);    }

    if (inet_aton(argv[1], &addr) == 0) {        perror("inet_aton");        exit(EXIT_FAILURE);    }    printf("addr = 0x%-10x\n", addr.s_addr);

    printf("%s\n", inet_ntoa(addr));    exit(EXIT_SUCCESS);}

[email protected]:~/tmp/network$ ./a.out 127.0.0.1addr = 0x100007f   127.0.0.1
char *inet_ntoa(struct in_addr in)
{
    static char buf[INET_NTOA_MAX_LEN];
    return inet_ntoa_r(in, buf);
}

注意:

1、inet_ntoa的返回值是一个static类型的char *指针,所以使用的时候需要注意(不可重入,可以使用线程安全的inet_ntoa_r函数代替)

2、The inet_addr() function converts the Internet host address cp from IPv4 numbers-and-dots notation into binary data in network byte order.  If the input is invalid, INADDR_NONE (usually -1) is
       returned.  Use of this function is problematic(有问题的) because -1 is a valid address (255.255.255.255).  Avoid its use in favor of inet_aton(), inet_pton(3), or getaddrinfo(3) which provide a  cleaner
       way to indicate error return.(因为其返回值为in_addr_t,当返回-1时,有二义性->表示两个含义)

3、inet_aton() returns nonzero if the address is valid, zero if not.

4、inet_aton/inet_addr/inet_ntoa仅适用于ipv4地址

5、inet_pton/inet_ntop对于v4和v6地址均适用

时间: 2024-10-13 11:33:57

网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)的相关文章

IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa

inet_pton NAME ????inet_pton - 将 IPv4 和 IPv6 地址从点分十进制转换为二进制 SYNOPSIS #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); DESCRIPTION ????该函数将字符串src转换为af地址类型协议簇的网络地址,并存储到dst中.对于af参数,必须为AF_INET或AF_INET6 RETURN VALUE ????inept_pto

IP 地址转换 inet_addr() inet_ntoa() 笔记

inet_addr()   inet_ntoa() 及其自实现函数self_inet_ntoa() 和 self_inet_addr() 笔记 #include <WINSOCK2.h> #include <iostream> #pragma comment(lib,"WS2_32.LIB") using namespace std; char *self_inet_ntoa(UINT in); ULONG self_inet_addr(const char *

linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换

用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int main(int argc,char **aggv) { struct hostent *host; char hostname[]="www.163.com"; char hostname2[]="www.baidu.com"; struct in_addr in;

网络地址转换NAT

一.网络地址转换NAT: 在专用网内部的一些主机本来已经分配到了本地IP地址,但现在想和Internet上的主机进行通信,最简单的办法就是再申请一些全球的IP地址,但是全球的IPv4的地址已经不多了,所以采用了一种方法是网络地址转换. 在专用网连接到Internet的路由器上安装NAT软件,把装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址,才能和Internet连接.所有使用本地地址的主机和Internet进行通信时,都要在NAT路由器上经本地地址转换成全球的IP地址

网络地址转换(NAT)的原理与配置

随着网络的发展,公用IP地址的需求与日俱增.为了缓解公用IP地址的不足,并且保护公司内部服务器的私网地址,可以使用NAT(Network Address Translation,网络地址转换)技术将私网地址转化成为公网地址,缓解IP地址的不足,并且隐藏内部服务器的私网地址. NAT的概述与现实方式 1. NAT概念 网络地址转换(NAT)通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上,广泛应用于各种类型的互联网接入方式和各种类型的网络中.原因很简

第11章 拾遗1:网络地址转换(NAT)和端口映射

1. 网络地址转换(NAT) 1.1 NAT的应用场景 (1)应用场景:允许将私有IP地址映射到公网地址,以减缓IP地址空间的消耗 ①需要连接Internet,但主机没有公网IP地址 ②更换了一个新的ISP,需要重新组织网络时,可使用NAT转换 ③需要合并两个具有相同网络地址的内网 (2)NAT的优缺点 优点 缺点 ①节约合法的公网IP地址 ②减少地址重叠现象 ③增加连接Internet的灵活性 ④增加内网的安全性 ①地址转换产生交换延迟,也就是消耗路由器性能. ②无法进行端到端的IP跟踪 ③某

网络地址转换实验

1.概念 网络地址转换用于控制网络封包的表面源或所需目标地址. 基于主机的简单防火墙只具有 INPUT 链中的规则,以 ACCEPT 或 REJECT 封包,但是在专用(不可路由)网络的网关或路由器上,通常使用 PREROUTING 和 POSTROUTING 链修改封包.nat 表使用三条链: PREROUTING . OUTPUT 和 POSTROUTING .当路由器修改通过其的网络通信的源或目标 IP 地址或端口时,进行网络地址转换.它用于映射使用单个 IP 地址的计算机网络,以使其可以

NAT网络地址转换模拟过程

原理图,如图1 图1 以下为配置NAT网络地址转换的实验: eNSP模拟图,如图2 图2 Step1.给路由器的每个接口赋予一个地址,如图3,图4 图3 图4 AR1和AR2中添加路由表项,如图5,图6 图5 图6 在IP为202.16.3.4的主机处抓包,结果如图7所示,当IP为专用地址的192.168.1.10的主机访问全球IP地址202.16.3.4的主机,经过NAT路由器转换后使用公网IP地址访问公网的IP. 图7

2016.7.9 计算机网络复习要点第四章之虚拟专用网VPN和网络地址转换NAT

1.虚拟专用网VPN (1)一个机构内,对于那些仅在本机构内部使用的计算机就可以由本季候自行分配其IP地址,让这些计算机使用仅在本机构有效的IP地址(本地地址),不需要申请全球唯一的IP地址(全球地址): (2)专用地址:这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信,换言之,专用地址只能用作本地地址而不能用作全球地址: (3)在因特网中的路由器,对目的地址是专用地址的数据报一律不转发: (4)三个专用地址: **10.0.0.0到10.255.255.255(或10.0.0