Como posso obter informações de endereço IP não formatadas no shell?

3

Estou escrevendo um script de shell que precisa de informações sobre o estado da conexão de rede - as coisas básicas, como endereço IP, sub-rede, máscara de rede e assim por diante.

Eu poderia usar apenas ifconfig e sed / grep para as informações, mas esperava que houvesse uma maneira mais clara de fazer isso - possivelmente usando o comando ip ou utilitários semelhantes.

Estou procurando algo que possa dar os seguintes resultados:

$ (magic command) ip
192.168.1.1
$ (magic command) netmask
255.255.255.0
$ (magic command) subnet
192.168.0.0

e possivelmente coisas semelhantes para gateway de rede / servidores de DNS.

Existe tal comando? Talvez exista um sinalizador --unformatted para ip ou ifconfig ? Eu sou muito esperançoso / ingênuo?

Obrigado :)

    
por jackweirdy 01.09.2013 / 21:29

4 respostas

4

Você também pode usar ifdata para obter informações sem analisar a saída de ip com grep , awk ou outras ferramentas:

[~]$ ifdata -pa eth0
192.168.246.161
[~]$ ifdata -pn eth0
255.255.240.0
[~]$ ifdata
Usage: ifdata [options] iface
     -e   Reports interface existence via return code
     -p   Print out the whole config of iface
    -pe   Print out yes or no according to existence
    -pa   Print out the address
    -pn   Print netmask
    -pN   Print network address
    -pb   Print broadcast
    -pm   Print mtu
    -ph   Print out the hardware address
    -pf   Print flags
    -si   Print all statistics on input
   -sip   Print # of in packets
   -sib   Print # of in bytes
   -sie   Print # of in errors
   -sid   Print # of in drops
   -sif   Print # of in fifo overruns
   -sic   Print # of in compress
   -sim   Print # of in multicast
    -so   Print all statistics on output
   -sop   Print # of out packets
   -sob   Print # of out bytes
   -soe   Print # of out errors
   -sod   Print # of out drops
   -sof   Print # of out fifo overruns
   -sox   Print # of out collisions
   -soc   Print # of out carrier loss
   -som   Print # of out multicast
  -bips   Print # of incoming bytes per second
  -bops   Print # of outgoing bytes per second
    
por Nykakin 02.09.2013 / 08:22
4

O comando ip substitui o comando ifconfig e suporta a opção -o para facilitar a análise automática.

Por exemplo:

ip -o addr show dev wlan0|awk '=="inet"{print }'

produzirá algo como:

192.168.0.2/24
    
por Robie Basak 01.09.2013 / 22:06
2

Bem, você pode tentar extrair e despertar as informações da saída assim: ip addr show eth0 | grep 'inet ' | awk '{ print }'

Sua saída deve ficar assim: 192.168.1.201/24

ip addr show eth0 obtém as informações da eth0. grep 'inet ' é para o IPv4. 'inet6' deve ser usado para IPv6. awk '{ print }' simplesmente reduz a saída para a segunda série de caracteres.

A máscara de rede pode ser determinada a partir de / 24 após o endereço IP.

    
por brejoc 01.09.2013 / 22:04
1

Sim, existe uma maneira de criar seus próprios comandos e obter suas informações.

  • Para obter seu IpAddress , salve o seguinte comando em qualquer arquivo, digamos myipaddr :

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print }' | cut -f2 -d:
    
  • Da mesma forma para obter o NetMask , salve o seguinte comando no arquivo, digamos mymask :

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print }' | cut -f2 -d:
    
  • Para obter Bcast (sub-rede), salve o seguinte comando em outro arquivo, digamos mysubnet :

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print }' | cut -f2 -d:
    
  • Em seguida, torne todo o arquivo executável e copie ou mova-o para o diretório /bin :

    $ sudo chmod +x myipaddr mysubnet mymask
    $ sudo cp myipaddr mysubnet mymask /usr/bin
    

Agora, para obter as informações desejadas, basta abrir um Terminal e executar qualquer um desses comandos. Por exemplo:

    $ sudo myipaddr

Deve exibir algo assim:

192.168.1.11

    $ sudo mymask

deve exibir algo como:

255.255.255.0

    $ sudo mysubnet

deve exibir algo como:

192.168.1.255

    
por Saurav Kumar 01.09.2013 / 22:21