IP地址和二进制IP地址之间的转换
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
我们看到的IP通常是类似于127.0.0.1这样的字符串,然而计算机理解的则是像0x01111111100000000000000000000001(127.0.0.1)这样的ip地址方式。
对于Linux系统而言有一组函数是专门处理这块的:
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
/*将IP地址装换为地址结构in_addr值*/
int inet_aton(const char *cp, strcut in_addr *inp);
/*将字符串转换为in_addr值*/
in_addr_t inet_addr(const char *cp);
/*将字符串地址的网络部分转为in_addr值*/
in_addr_t inet_network(const char *cp);
/*将in_addr转为字符串*/
char *inet_ntoa(strcut in_addr in);
/*将网络地址和主机地址合成为IP地址*/
struct in_addr inet_makeaddr(int net, int host);
/*获得地址的主机部分*/
in_addr_t inet_lnaof(strcut in_addr in);
/*获得地址的网络部分*/
in_addr_t inet_netof(strcut in_addr in);
/*安全可重入地址转换函数*/
/*将字符串转换为in_addr值*/
int inet_pton(int af, const char *src, void *dst);
/*将in_addr转为字符串*/
int inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
1.inet_aton()
将cp中存储的点分十进制字符串类型的IP地址转换为二进制IP地址,保存在inp结构体指针中,返回0为成功。
2.inet_addr()
可以理解inet_aton的缩减版,返回值-1表示非法参数。
注意:由于-1(1111111111111111)同时可以理解为合法ip地址255.255.255.255的转换结果,所以不能用这个函数转换255.255.255.255.
3.inet_network()
与inet_addr不同的是,cp可能是以下值:
- a.b.c.d 这种情况是一个完全的IP地址转换,与inet_addr完全一致
- a.b.c 这种情况指定了IP的前三个段,a.b解释为IP前16位,c解释为后16位,例如127.16.888会将888解释为IP的后16位
- a.b 则会将a作为IP的前8位,b解释为后面的24位
- a 当仅为一部分时,a的值直接作为IP地址,不做字节序转换
4.inet_ntoa()
/将in_addr转为字符串,但是注意该函数不是线程安全函数,因为转换的内存区域时静态的
5.inet_makeaddr()inet_lnaof() inet_netof()
IP地址分为网络地址和主机地址,通常前16位为网络地址,后16位为主机地址
6.inet_pton()
af:表示网络协议族, IPV4 下的值为AF_INET, src 为需要转换的字符串;dst为指向struct in_addr的指针,返回-1时通常是af的协议族不支持
7.inet_ntop()
af:表示网络协议族, IPV4 下的值为AF_INET, src 为指向struct in_addr的指针;dst为字符串,cnt为缓存区大小。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)