如何从 IP 地址获取网络掩码

评论 0 浏览 0 2023-02-10

概述

在本教程中,我们将讨论网络掩码。我们将定义netmask、子网(子网络),以及如何在Linux系统中找到netmask信息。我们将研究ipnmcliifconfig等命令,以及如何使用它们来获取网络掩码信息。此外,我们还将使用其他工具,如ifdata来获得同样的信息。

2.了解网络掩码

当一个设备连接到互联网时,它被分配一个IP地址。给出的IP地址包含两部分 – 网络地址和主机地址。

网络地址用于查找设备所在的子网络,而主机地址则识别子网络中的具体设备。例如,如果我们的IP地址为192.168.0.x192.168.0是网络地址,而.x则是主机地址。

为了在网络环境中呈现它,我们使用网络掩码。 网络掩码是一个 32 位二进制掩码,它将 IP 地址分为网络位和主机位。

网络掩码有助于识别同一网络中的IP地址范围。通常情况下,我们可以交替使用净掩码和子网掩码。

2.1.分类编址

在IPv4网络的早期实现中,我们使用地址类别来分配IP地址。主要的类别是A、B和C类。每个地址类别都有一个不同的网络掩码:

  • 1.0.0.0127.255.255.255的A类IP地址的默认网络掩码为255.0.0.0
  • B类IP地址从128.0.0.0191.255.255.255,其默认的网络掩码为255.255.0.0
  • C类IP地址从192.0.0.0223.255.255.255,其默认的网络掩码为255.255.255.0

2.2.无类寻址

无类域间路由 (CIDR) 取代了有类网络设计。 它不使用网络类来分配地址,而是使用可变长度子网掩码/VLSM(在一个子网内创建不同大小的子网)。

在无类别的IP寻址中,我们使用子网将A、B和C类网络划分为多个子网络,称为子网。

在这个过程中,我们将“on”位数(我们将网络掩码转换为二进制后的1位数)后缀到每个子网中定义的IP地址上。我们将此称为CIDR符号,它是表示网络掩码的新方法。

例如,在一个C类网络中,我们的IP地址为192.168.0.10,网络掩码为255.255.255.0。这意味着在网络部分有24个“on”位。我们也可以把它写成192.168.0.10/24

尽管网络掩码和子网掩码可以互换使用,但在少数情况下,我们对它们的使用是不同的。例如,当我们提到一个网络的网络掩码时,我们使用网络掩码。然而,当我们提到一个子网的网络掩码时,我们把它称为子网掩码。

大多数 Linux 网络命令使用 CIDR 符号来指定网络掩码。IPv4和IPv6都使用CIDR符号。最后,genmask指的是目标网络的网络掩码。

3.ip 命令

我们使用ip命令来创建或显示网络信息,如ip@地址和路由。当我们运行ip命令时,显示的信息中就有网络掩码。

让我们运行ip,并找到网络掩码:

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ea:a5:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.104/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
       valid_lft 7120sec preferred_lft 7120sec
    inet6 fe80::129e:c85e:f067:e115/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

在上面的例子中, ip addr show命令显示了网络信息,包括IP地址、网络掩码、广播等。在接口enp0s3,上,IP地址被后缀了一个/24/24是CIDR符号,它表示我们的网络掩码的值。它还表明我们的前三个八位数被使用。这意味着我们的网络掩码是255.255.255.0。IPv6地址也是用/64的后缀。

让我们看看如何运行这个命令来获得网络掩码的其他变化。在下面的例子中,-a选项指定了要显示的IP版本,grep在最后一个命令中过滤结果:

~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.0.104/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
       valid_lft 7080sec preferred_lft 7080sec
$ ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fe80::129e:c85e:f067:e115/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
$ ip addr show | grep 'inet'
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
    inet 192.168.0.104/24 brd 192.168.0.255 scope global dynamic noprefixroute enp0s3
    inet6 fe80::129e:c85e:f067:e115/64 scope link noprefixroute

4.nmcli 命令

nmcli 命令用于控制网络管理器,即创建、显示、编辑、删除、激活和停用网络连接。 它还可以控制和显示网络设备的状态和信息。

nmcli命令的输出可能很长。我们需要对其进行过滤,以获得我们需要的特定结果。

让我们运行它,并过滤掉我们的结果,以获得网络掩码信息:

$ nmcli device show enp0s3 | grep 'IP'
IP4.ADDRESS[1]: 192.168.0.107/24
IP4.GATEWAY: 192.168.0.1
IP4.ROUTE[1]: dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.ROUTE[3]: dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 100
IP4.DNS[1]: 192.168.0.1
IP6.ADDRESS[1]: fe80::129e:c85e:f067:e115/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024

我们已经得到了我们需要的结果。与ip命令的输出类似,使用CIDR符号显示了网络掩码。

5.ifconfig命令

ifconfig命令已被废弃,在某些系统中不存在。ifconfig显示当前活动接口的状态和配置。如果我们给出一个单一的接口作为唯一的参数,我们只得到指定接口的状态。否则,我们不指定任何接口来显示所有的接口。

让我们使用apt来安装它吧:

$ sudo apt-get install net-tools

下一步,让我们运行ifconfig命令:

$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.104  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::129e:c85e:f067:e115  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:ea:a5:61  txqueuelen 1000  (Ethernet)
        RX packets 410  bytes 64285 (64.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 268  bytes 32179 (32.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 144  bytes 12058 (12.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 144  bytes 12058 (12.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在这个例子中,网络掩码是返回的值之一。我们没有使用CIDR符号来获取netmask的值,而是得到了它的值255.255.255.0。如果我们有一个以上的功能接口,我们将得到每个接口的网络掩码。

6.ifdata

ifdata命令检查一个网络接口的可用性,并获取一个接口的信息。

使用ifdata的好处是,我们不需要用管道将我们的输出送到grepawk这样的命令来过滤我们的结果–;ifdata给我们提供了我们所需要的确切结果。

ifdata并没有预装在我们的系统中。所以我们需要首先安装它。让我们安装moreutils包,其中包含ifdata工具:

$ sudo apt-get install moreutils

接下来,让我们来看看这个命令的可用选项:

ifdata

接下来,为了获得某个特定接口的信息,我们在设置选项后加上接口的名称。例如,让我们获得enp0s3接口的一般信息:

$ ifdata -p enp0s3
192.168.178.31 255.255.255.0 192.168.178.255 1500

现在让我们来获取网络掩码的信息:

$ ifdata -pn enp0s3
255.255.255.0

最后,使用ifdata的唯一缺点是,我们不能用它来获取IPv6网络信息

7.结语

在这篇文章中,我们学习了获得网络掩码信息的各种方法。我们看到,大多数命令都使用CIDR符号来表示网络掩码。我们研究了通过将常见的网络命令如ipgrep连在一起来过滤出结果。

最后更新2023-05-12
0 个评论
标签