Shell: Obter o IP da interface de rede

(LANG=C; ifconfig eth0|grep "inet addr"|cut -f2 -d:|cut -f1 -d" ")

Para pegar o endereço de uma interface diferente basta colocar o nome dessa interface no lugar de eth0.

É interessante que o comando seja colocado entre parênteses, para não modificar o valor da variável de ambiente LANG da sua sessão de shell atual (que controla o idioma em que os aplicativos são exibidos).

This entry was posted in Linux, Shell and tagged , , . Bookmark the permalink.

7 Responses to Shell: Obter o IP da interface de rede

  1. eugenidodonov says:

    …ou usando awk:
    LANG=C ifconfig eth0 | awk ‘/inet addr/ {sub(/:/,” “); print $3}’

    A diferença é que neste caso somente 1 processo será executado depois do ifconfig (awk), e não 3 (grep, cut, cut) :)

  2. “print” seria mais um processo.

  3. Caso prefira fazer com sed, seria algo como!

    [leapstone@node0 ~]$ LANG=C;/sbin/ifconfig eth0 | sed ‘/inet addr/!d; s/.*addr://; s/ .*//g’
    172.27.3.9
    [leapstone@node0 ~]$

    []s

  4. Ual, precisei disso no mesmo dia, acabei fazendo assim:

    #!/bin/bash
    #
    # Tiago Oliveira de Jesus – tiago@vgt.com.br
    # /usr/local/bin/ip_gw.sh – 2009-04-29
    #
    # Script para pegar ip e gw da placa de rede dinamicamente.
    #
    # O script recebe como parametros a placa (ethX) + IP ou GW ou NET
    # para retornar IP ou GW ou NETWORK:-)
    #
    # Exemplos:
    # /usr/local/bin/ip_gw.sh eth1 IP
    # 123.456.789.12
    #
    # /usr/local/bin/ip_gw.sh eth1 GW
    # 123.456.789.1
    #
    # /usr/local/bin/ip_gw.sh eth1 NET
    # 123.456.789.0/24
    #

    ## CHANGELOG ##
    # 2009-05-01 – Adicionada a variável de ambiente LANG para padronização das respostas
    # Retirado do post https://codare.aurelio.net/2009/04/29/shell-obter-o-ip-da-interface-de-rede/
    # by Fabiano Pires
    # 2009-05-01 – Adicionada if para verificar se a placa existe
    #
    ##############

    LANG=C
    PLACA=${1}
    TIPO=${2}

    PegaIP(){
    IP=$(ifconfig $PLACA | grep ‘inet addr:’|sed ‘s/.*inet addr://g ; s|\([0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\)\(.*\)|\1|g’)
    echo $IP
    }

    PegaGW(){
    GW=$(ip route |grep $PLACA|grep default|cut -d” ” -f3)
    echo $GW
    }

    PegaNET(){
    NET=$(ip ro|grep “^\([0-9]\)”|grep “/”|grep $PLACA|cut -d” ” -f1)
    echo $NET
    }

    if grep -qws $PLACA <(ifconfig |grep ‘^eth’|cut -f1 -d” “)
    then

    case $TIPO in
    IP)
    PegaIP
    ;;
    GW)
    PegaGW
    ;;
    NET)
    PegaNET
    ;;
    *)
    echo “Use $0 ethX {IP|GW|NET}”
    exit
    ;;
    esac
    else
    echo “$PLACA não existe”
    fi

  5. Eca.. ficou feio aqui, acho que nem o lugar, sorry..

    Da próxima posto noutro lugar.

  6. Dá até para remover 1 grep se usar o -n do sed:

    ifconfig eth0 | sed -n ‘s/.*inet addr://g ; s|\([0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\.[0-9]\{,3\}\)\(.*\)|\1|gp’

Comments are closed.