当“/etc/network/interfaces”的网络掩码地址无效时,ifup 会做什么?

当“/etc/network/interfaces”的网络掩码地址无效时,ifup 会做什么?

接口文件如下所示:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.0.130
    netmask 250.255.255.0
    gateway 192.168.0.254

正如您所看到的,网络掩码地址有点无效。 (250而不是255)问题是当我们使用下面的代码来获取当前的IP地址和网络掩码时:

ioctl(iSock, SIOCGIFADDR, &stIFReq);
ioctl(iSock, SIOCGIFNETMASK, &stIFReq);

总是返回“72,0,67,33“(十六进制:0x48004321)在两个ioctl函数上。我想知道这是否是某种错误代码或错误ifup。我想知道对网络掩码/ip地址进行什么类型的检查ifup,以及如果判断地址,它会做什么视为无效。

附加信息:

  1. Linux版本2.6.35.3

  2. BusyBox v1.18.5

  3. [ifup]不是脚本而是系统上的C程序

答案1

检查你的系统,但大多数ifup都是 shell 脚本,所以你可以通过在源头获取峰值来了解它的作用。您可以使用以下命令查看脚本所在的位置:

$ type -a ifup
ifup is /sbin/ifup

Feodra/红帽发行版

在我的系统(Fedora 14)上/sbin/ifup包含这个 shell 脚本函数库,/etc/sysconfig/network-scripts/network-functions.如果您grep通过此文件获取“掩码”:

$ grep -i mask /etc/sysconfig/network-scripts/network-functions
    if [ -z "${NETMASK}" ]; then
    eval $(/bin/ipcalc --netmask ${IPADDR})
    eval $(/bin/ipcalc --prefix ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --broadcast ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --network ${IPADDR} ${NETMASK})

该工具ipcalc是一个可执行文件,用于进行有关网络配置的“计算”。

您也可以从命令行运行它:

$ /bin/ipcalc --netmask 192.168.1.1
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.1.1 255.255.255.0
PREFIX=24

Debian/Ubuntu

ipcalc工具在 Debian/Ubuntu 上略有不同,但具有类似的功能。

$ ipcalc 192.168.1.1
Address:   192.168.1.1          11000000.10101000.00000001. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet

你的配置

软呢帽:

$ /bin/ipcalc --netmask 192.168.0.130
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.0.130 250.255.255.0
PREFIX=24

乌班图:

$ ipcalc 192.168.0.130
Address:   192.168.0.130        11000000.10101000.00000000. 10000010
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

因此,最有可能发生的情况是您的设置在某个位置设置了错误的值。为了进一步调试,我需要查看ip.

例子

$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:19:d1:e8:4c:95 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::219:d1ff:fee8:4c95/64 scope link 
       valid_lft forever preferred_lft forever

答案2

您正在运行 BusyBox,其中ifup/ifdown是小程序。查看函数count_netmask_bits()中的源代码, BusyBox 从 LSB 开始并在遇到第一个 1 时停止。因此它不会注意到您的格式错误的网络掩码。

相关内容