Visualizzazione dell'indirizzo IP sull'interfaccia eth0

17

Come posso visualizzare l'indirizzo IP mostrato su eth0 usando uno script?

    
posta user43389 11.12.2014 - 23:56

15 risposte

24

salva questo in un file e poi esegui bash <filename>

#!/bin/bash
ifconfig eth0 | grep "inet addr"

è più preciso ottenere solo il numero che mostra l'indirizzo IP:

#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
    
risposta data edward torvalds 12.12.2014 - 00:00
16

Per fornire un'altra opzione, puoi utilizzare il comando ip addr in questo modo per ottenere l'indirizzo IP:

ip addr show eth0 | grep "inet\b" | awk '{print }' | cut -d/ -f1
  • ip addr show eth0 mostra informazioni su eth0
  • grep "inet\b" mostra solo la linea che ha l'indirizzo IPv4 (se si desidera l'indirizzo IPv6, modificarlo in "inet6\b" )
  • awk '{print }' stampa sul secondo campo, che ha l'indirizzo ip / maschera, esempio 172.20.20.15/25
  • cut -d/ -f1 prende solo la porzione di indirizzo IP.

In uno script:

#!/bin/bash
theIPaddress=$(ip addr show eth0 | grep "inet\b" | awk '{print }' | cut -d/ -f1)
    
risposta data Alaa Ali 12.12.2014 - 03:16
14

Tratto da link

hostname -i

Tuttavia potrebbe restituire un indirizzo IP locale (127.0.0.1), quindi potrebbe essere necessario utilizzare e filtrare:

hostname -I

Dalle manpage del nome host:

  

-i, --ip-address

     

Visualizza l'indirizzo (i) di rete del nome host. Si noti che questo funziona solo se il nome host può essere risolto. Evitare l'uso di questa opzione; usa invece il nome host --all-ip-address.

     

-I, --all-ip-addresses

     

Visualizza tutti gli indirizzi di rete dell'host. Questa opzione enumera tutti gli indirizzi configurati su tutte le interfacce di rete. L'interfaccia di loopback e gli indirizzi locali di collegamento IPv6 sono omessi. Contrariamente all'opzione -i, questa opzione non dipende dalla risoluzione dei nomi. Non fare ipotesi circa l'ordine dell'output.

    
risposta data ThorSummoner 09.03.2016 - 21:01
4

Ecco alcuni oneliner .....

Awk

ifconfig eth0 | awk '/inet addr/{split(,a,":"); print a[2]}'

funzione di divisione nel comando awk sopra suddivide la seconda colonna in base al delimitatore : e memorizza il valore suddiviso in un array associativo a . Quindi a[2] contiene il valore della seconda parte.

sed

ifconfig eth0 | sed -n '/inet addr/s/.*inet addr: *\([^[:space:]]\+\).*//p'

In base a sed, \(...\) ha chiamato il gruppo di cattura che viene utilizzato per catturare i caratteri. Potremmo riferire quei personaggi catturati attraverso il back-referencing. \([^[:space:]]\+\) cattura qualsiasi carattere ma non lo spazio una o più volte.

grep

ifconfig eth0 | grep -oP 'inet addr:\K\S+'

\K scarta i caratteri precedentemente abbinati dalla stampa finale e \S+ corrisponde a uno o più caratteri non spaziali.

Perl

ifconfig eth0 | perl -lane 'print  if /inet addr:(\S+)/'

Uno o più caratteri non spaziali che si trovano accanto alla stringa inet addr: vengono catturati e, infine, stampiamo solo quei caratteri catturati.

    
risposta data Avinash Raj 12.12.2014 - 08:28
4

la risposta di @ markus-lindberg è la mia preferita. Se aggiungi -o -4 ai flag di ip, otterrai un output molto più facilmente parsabile (e coerente):

ip -o -4 a | awk ' == "eth0" { gsub(/\/.*/, "", ); print  }'

-o sta per --oneline , che è pensato per aiutare esattamente in questo tipo di situazioni. Il -4 viene aggiunto al limite all'indirizzo IPv4, che è quello che implicano tutte le altre risposte.

    
risposta data Amos Shapira 14.06.2016 - 03:43
1

Suggerisco di utilizzare una libreria python come netifaces appositamente progettata per questo scopo.

sudo pip install netifaces
python -c "import netifaces; print netifaces.ifaddresses('eth0')[netifaces.AF_INET][0]['addr']"

Per ottenere l'interfaccia di rete predefinita che è in uso.

default_inf = netifaces.gateways()['default'][netifaces.AF_INET][1]
    
risposta data Sandeep 09.04.2016 - 02:34
1
ip addr|awk '/eth0/ && /inet/ {gsub(/\/[0-9][0-9]/,""); print }'

Utilizza solo ip addr che sostituisce ifconfig e awk combinato con la sostituzione (gsub).

Smetti di usare troppi processi per compiti semplici

    
risposta data Markus Lindberg 23.10.2015 - 10:42
1

Solo un'altra opzione che può essere utile se non si dispone di awk (come nel caso di alcuni dispositivi incorporati):

ip addr show dev eth0 scope global | grep "inet\b" | cut -d/ -f 1 | egrep -o "([[:digit:]]{1,3}[.]{1}){3}[[:digit:]]{1,3}"
    
risposta data Fulvio Flaco 02.08.2016 - 14:43
1

Eccone una buona, usa solo grep come comando secondario:

ip addr show eth0 | grep -oP 'inet \ K \ S [0-9.] +'

Non vedo perché dovresti usare più comandi del necessario

    
risposta data Rick 18.07.2017 - 21:10
1

ifconfig eth0|grep 'inet '|awk '{print }'

    
risposta data Maksim Kostromin 10.11.2017 - 21:58
1

ecco per IPv4 :

ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"

qui per IPv4 & amp; particolare dev (eth0):

ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"

per IPv6 :

ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"

    
risposta data XXL 13.02.2018 - 13:04
0

può essere usato anche con un utente normale.

ip addr show eth0 | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
    
risposta data Matheus Baldasso 24.03.2017 - 20:34
0

Questo è il modo più breve che ho trovato:

ip -f inet addr show | grep -Po 'inet \K[\d.]+'

Sostituisci con la tua interfaccia di rete.

ip -f inet dice a ip di restituire solo i valori per la famiglia inet (ipv4).

grep -Po dice a grep di interpretare il valore successivo come un perl-regex e stampa solo i valori corrispondenti.

L'espressione regolare \K[\d.]+ dice "butta via tutto fino a questo punto (\ K), e combina quanti più valori numerici seguiti da un punto in una riga il più possibile". Pertanto, corrisponderà solo all'indirizzo IP e ignorerà tutto dopo di esso, inclusa la maschera di sottorete \ XX in forma abbreviata.

    
risposta data Ryan 19.07.2017 - 08:27
0

in questi giorni con interfacce multiple (ad esempio se usi una finestra mobile) e l'interfaccia di denominazione da parte di ETH non è più la norma

Uso questo comando per estrarre IP / Mask:

IPMASK=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6)

Quindi qualunque sia il numero di interfacce che avrò e qualunque sia il loro nome, GREP catturerà solo il primo con l'opzione MULTICAST.

Uso questo comando per estrarre solo l'IP senza la maschera:

IP=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6|cut -d'/' -f1)

Uso questi comandi su diversi BDS e amp; NIX non fallisce mai;)

    
risposta data JOduMonT 26.10.2017 - 09:28
0

Nel mio script sto usando qualcosa del genere:

 
re="inet[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
if [[ $(ip addr show eth0) =~ $re ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Cannot determin IP" 1>&2
fi

Non genera alcun processo.

    
risposta data Maciej Wawrzyńczuk 29.10.2017 - 19:43

Leggi altre domande sui tag