2025年IP地址转化(学习笔记)

IP地址转化(学习笔记)1 什么是 ip 地址 IP 地址是一种 Internet 上的主机编址方式 也称为网际协议地址 IP 地址是任意一台主机在网络中的唯一标识 2 IP 地址的分类 1 ipv4 占 32 位 2 ipv6 占 128 位 3 IPV4 地址的组成 ipv4 一般使用点分十进制字符串来标识 比如 192 168 3 103

大家好,我是讯享网,很高兴认识大家。

1、什么是ip地址

           IP地址是一种Internet上的主机编址方式,也称为网际协议地址。  IP地址是任意一台主机在网络中的唯一标识


2、 IP地址的分类  

3、 IPV4地址的组成

         ipv4一般使用点分十进制字符串来标识,比如192.168.3.103
         使用32bit,由{网络ID,主机ID}两部分组成
         子网ID:IP地址中由子网掩码中1覆盖的连续位
         主机ID:IP地址中由子网掩码中0覆盖的连续位


讯享网

 

4、 ip地址特点

子网ID不同的网络不能直接通信,如果要通信则需要路由器转发
主机ID全为0的IP地址表示网段地址
主机ID全为1的IP地址表示该网段的广播地址
例如:
192.168.3.10和192.168.3.111可以直接通信
如果192.168.3.x网段而言,192.168.3.0表示网段,192.168.3.255表示广播地址 

问题1:为什么我们要学它,它有什么作用?

 比如,我跟你打电话,我是不是需要拨打你的号码,你的电话才会响应。号码就相当于我们的ip地址,我知道你的号码(ip),就可以跟你通信。同理,我们学习网络编程,我们要互相通信,是不是也需要一个ip,把ip作为媒介,从而找到你。

问题2:192.168.3.50  此ip属于什么类型?计算机能识别的出来??

答:此ip属于我们人为识别的字符串,计算机是不能直接识别出来,因此,我们就需要把这个人为识别的字符串,转化成计算机能识别的整型数据。

 5、地址转化函数(inet_pton())

            int inet_pton(int family,const char *strptr, void *addrptr);
功能:
            将点分十进制数串转换成32位无符号整数
参数:
            family 协议族
                                  AF_INET IPV4网络协议
                                  AF_INET6 IPV6网络协议

             strptr 点分十进制数串
             addrptr 32位无符号整数的地址
返回值:
            成功返回1
            失败返回其它

       

#include<stdio.h> #include <arpa/inet.h> int main() { char src[] ="192.168.3.50"; unsigned int dst=0; unsigned char *q=NULL; inet_pton(AF_INET,src,&dst); printf("dst = %d\n",dst); q=(char *)&dst; printf("%d,%d,%d,%d\n",*q,*(q+1),*(q+2),*(q+3)); return 0; } 

讯享网

运行结果

6、整型数据转字符串格式ip地址

头文件

           const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
功能:
           将32位无符号整数转换成点分十进制数串
参数:
           family 协议族
           addrptr 32位无符号整数
           strptr 点分十进制数串
           len strptr缓存区长度

 len的宏定义
          #define INET_ADDRSTRLEN 16           //即 ipv4
          #define INET6_ADDRSTRLEN 46         //即 ipv6

返回值:
            成功:则返回字符串的首地址
            失败:返回NULL 

讯享网#include<stdio.h> #include <arpa/inet.h> int main() { unsigned char src[]={192,168,3,50}; char q[20]; inet_ntop(AF_INET,&src,q,16); printf("q=%s\n",q); return 0; } 

运行结果

 q=192.168.3.50

 7、inet_addr()和inet_ntoa()

                                这两个函数只能用于在ipv4地址的转换(常用)

7.1、inet_addr()

头文件:

              #include <sys/socket.h>
              #include <netinet/in.h>
              #include <arpa/inet.h>
函数:
             in_addr_t    inet_addr(const char *cp);
 功能:

             将点分十进制ip地址转化为整形数据
 参数:
              cp:点分十进制的IP地址
 返回值:
              成功:整形数据

#include<stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { unsigned long int addr; addr=inet_addr("192,168.3.50"); printf("addr = %ld\n",addr); return 0; } 

运行结果

 addr =

 7.2、inet_ntoa()

函数:          

            将整形数据转化为点分十进制的ip地址
 参数:
             in:保存ip地址的结构体
 返回值:

             成功:点分十进制的IP地址

小讯
上一篇 2025-03-08 22:23
下一篇 2025-01-12 10:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74833.html