O que o ifup faz quando “/ etc / network / interfaces” tem um endereço de máscara de rede inválido?

3

O arquivo de interfaces é semelhante ao seguinte:

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

Como você pode ver, o endereço da netmask é inválido. (250 em vez de 255) O problema é quando usamos o código a seguir para obter o endereço IP e a máscara de rede atuais:

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

sempre retorna " 72,0,67,33 " (hex: 0x48004321) nas duas funções ioctl. Gostaria de saber se isso é algum tipo de erro ou bug durante ifup . Gostaria de saber que tipo de verificação ifup faz em endereços de máscara de rede / ip e o que faz se o endereço for considerado inválido.

Informação adicional:

  1. Versão 2.6.35.3 do Linux

  2. BusyBox v1.18.5

  3. [ifup] não é um script, mas um programa em C no sistema

por Naze Kimi 24.10.2013 / 02:42

2 respostas

2

Verifique no seu sistema, mas na maioria dos ifup é um script de shell, para que você possa ver o que faz pegando um pico na origem. Você pode ver onde o script reside com este comando:

$ type -a ifup
ifup is /sbin/ifup

Distros de Feodra / Red Hat

No meu sistema (Fedora 14) /sbin/ifup inclui esta biblioteca de funções de script de shell, /etc/sysconfig/network-scripts/network-functions . Se você grep através deste arquivo para "máscara":

$ 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})

A ferramenta ipcalc é um executável usado para fazer "cálculos" referentes a configurações de rede.

Você também pode executá-lo a partir da linha de comando:

$ /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

A ferramenta ipcalc é um pouco diferente no Debian / Ubuntu, mas tem uma função semelhante.

$ 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

Você configurações

Fedora:

$ /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

Ubuntu:

$ 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

Então, o mais provável é que suas configurações estejam configurando com o valor errado em um ponto. Para depurar isso mais, preciso ver a saída de ip .

Exemplo

$ 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
    
por 24.10.2013 / 03:10
1

Você está executando o BusyBox, onde ifup / ifdown são applets. Analisando a função count_netmask_bits() no código fonte , o BusyBox começa no LSB e pára quando encontra o primeiro 1. Por isso, não irá notar a sua máscara de rede malformada.

    
por 28.05.2014 / 18:28