详解Address的多个方面

Address,翻译为“地址”,是计算机网络中用于标识通信体的一个重要概念。

一、Address的概念

Address,可以理解为一种联系方式,用于唯一识别通信实体。在计算机网络中,短语“Address”通常用于表示网络层和传输层协议,包括IPv4和IPv6协议中的IP地址和MAC地址。Address可以直接让计算机识别和定位设备,是计算机网络通信的基础。

二、Address的分类

Address按照其在计算机网络中的作用和表现形式,可以分为两大类,即:

1、网络层地址:用于在全球范围内唯一标识一个网络节点,在Internet中常指IPv4和IPv6的地址。

2、数据链路层地址:用于在同一物理网络的节点之间唯一标识一个设备,也称MAC地址。

因为两者的标识范围不同,所以也具有不同的编写方式。

三、Address的IPv4编写

IPv4(Internet Protocol version 4,即Internet协议第四版)是目前仍在广泛使用的网络层协议,其地址表示为32位二进制数,通常以点分十进制的方式表现。

例如:192.168.10.10
其中,192.168.10.是网络部分(Netowrk ID),10是主机部分(Host ID)。

//IPv4 Address示例代码 - C++
#include 
#include 

int main() {
    struct in_addr s; //IPv4地址结构体
    inet_pton(AF_INET, "192.168.10.10", &s); //将点分十进制地址转换为二进制形式
    printf("Network ID: %u\n", ntohl(s.s_addr)); //输出网络部分
    printf("Host ID: %u\n", ntohl(s.s_addr) & 0x000000ff); //输出主机部分
    return 0;
}

四、Address的IPv6编写

IPv6(Internet Protocol version 6,即Internet协议第六版)是未来趋势,地址有128位,采用冒号十六进制的方式表示,因为IPv6地址的位数太多,所以它的组成方式与整个网络的组成吻合是必须的。IPv6地址由三部分组成,即路由前缀、子网标识和接口标识。

例如:2001:da8:1057:900:b45f:3c3d:f50b:8347
其中,2001:da8:1057:900为路由前缀,b45f:3c3d:f50b:8347为接口标识。

//IPv6 Address示例代码 - C++
#include 
#include 

int main() {
    struct in6_addr s; //IPv6地址结构体
    inet_pton(AF_INET6, "2001:da8:1057:900:b45f:3c3d:f50b:8347", &s); //将冒号十六进制地址转换为二进制形式
    int i;
    printf("IPv6 Address: ");
    for (i = 0; i < 16; i++) {
        printf("%02x", s.s6_addr[i]); //逐位输出16进制数
        if (i % 2 == 1 && i < 15) {
            printf(":"); //每2位输出一个冒号,不包括最后一位
        }
    }
    return 0;
}

五、Address的MAC地址编写

MAC(Media Access Control)地址,也称物理地址,由硬件制造商设定,每个网络接口都有一个独特的MAC地址,用于在同一个局域网中寻找设备。

例如:76:AB:CD:FE:34:A9

//MAC Address示例代码 - C++
#include 
#include 
#include 
#include 

int main() {
    struct ifaddrs *ifap, *ifa;
    struct sockaddr_dl *sdl;
    u_char *ptr;
    char mac[64]; //存放MAC地址的字符串
    if (getifaddrs(&ifap) == -1) {
        return 1; //获取网卡列表失败
    }
    for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
        if ((ifa->ifa_flags & IFF_UP) == 0 || (ifa->ifa_flags & IFF_LOOPBACK) != 0) {
            continue; //只处理已启用且非环回网卡
        }
        if ((sdl = (struct sockaddr_dl *)ifa->ifa_addr) != NULL && sdl->sdl_family == AF_LINK && sdl->sdl_type == IFT_ETHER) {
            ptr = (u_char *)LLADDR(sdl); //获取MAC地址二进制形式
            snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4), *(ptr + 5)); //转换为十六进制字符串形式
            printf("MAC Address: %s\n", mac); //输出MAC地址
            break; //已找到符合条件的网卡,退出循环
        }
    }
    freeifaddrs(ifap); //释放网卡列表
    return 0;
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/289212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-24 03:01
下一篇 2024-12-24 03:02

相关推荐

  • 为什么Python不能编译?——从多个方面浅析原因和解决方法

    Python作为很多开发人员、数据科学家和计算机学习者的首选编程语言之一,受到了广泛关注和应用。但与之伴随的问题之一是Python不能编译,这给基于编译的开发和部署方式带来不少麻烦…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python合并多个相同表头文件

    对于需要合并多个相同表头文件的情况,我们可以使用Python来实现快速的合并。 一、读取CSV文件 使用Python中的csv库读取CSV文件。 import csv with o…

    编程 2025-04-29
  • 从多个方面用法介绍yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授权过程中,需要进行确认和配置级别控制的全能编程开发工程师。 一、授权确…

    编程 2025-04-29
  • 从多个方面zmjui

    zmjui是一个轻量级的前端UI框架,它实现了丰富的UI组件和实用的JS插件,让前端开发更加快速和高效。本文将从多个方面对zmjui做详细阐述,帮助读者深入了解zmjui,以便更好…

    编程 2025-04-28
  • WSL2 Minikube –listen-address用法介绍

    本文将从多个方面介绍WSL2 Minikube –listen-address参数的作用和用法。 一、什么是WSL2 Minikube –listen-ad…

    编程 2025-04-28
  • 学Python用什么编辑器?——从多个方面评估各种Python编辑器

    选择一个适合自己的 Python 编辑器并不容易。除了我们开发的应用程序类型、我们面临的软件架构以及我们的编码技能之外,选择编辑器可能也是我们编写代码时最重要的决定之一。随着许多不…

    编程 2025-04-28
  • 使用easypoi创建多个动态表头

    本文将详细介绍如何使用easypoi创建多个动态表头,让表格更加灵活和具有可读性。 一、创建单个动态表头 easypoi是一个基于POI操作Excel的Java框架,支持通过注解的…

    编程 2025-04-28
  • 创建列表的多个方面

    本文将从多个方面对创建列表进行详细阐述。 一、列表基本概念 列表是一种数据结构,其中元素以线性方式组织,并且具有特殊的序列位置。该位置可以通过索引或一些其他方式进行访问。在编程中,…

    编程 2025-04-28
  • Python多个sheet表合并用法介绍

    本文将从多个方面对Python多个sheet表合并进行详细的阐述。 一、xlrd与xlwt模块的基础知识 xlrd与xlwt是Python中处理Excel文件的重要模块。xlrd模…

    编程 2025-04-27

发表回复

登录后才能评论