Как я могу получить неформатированную информацию IP-адреса в оболочке?

Я пишу сценарий оболочки, который нуждается в информации о состоянии сетевого подключения - базовые вещи, такие как IP-адрес, подсеть, маска сети и так далее.

Я мог бы просто использовать ifconfig и sed / grep для информации, но я надеялся, что есть более чистый способ сделать это - возможно, используя ip команда или аналогичные утилиты.

Я ищу то, что может дать следующие результаты:

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

и, возможно, аналогичные вещи для сетевых шлюзов / DNS-серверов.

Существует ли такая команда? Возможно, есть --unformatted флаг для ip или же ifconfig? Я слишком оптимистичен / наивен?

Спасибо:)

4 ответа

Решение

Вы также можете использовать ifdata получить информацию без разбора вывода ip с grep, awk или другие инструменты:

[~]$ 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

ip команда заменяет ifconfig Команда и поддерживает -o опция для более простого автоматического разбора.

Например:

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

будет производить что-то вроде:

192.168.0.2/24

Ну, вы можете попытаться получить и получить информацию из вывода следующим образом: ip addr show eth0 | grep 'inet ' | awk '{ print $2}'

Ваш вывод должен выглядеть так: 192.168.1.201/24

ip addr show eth0 получает информацию от eth0. grep 'inet ' для IPv4. 'inet6' должен использоваться для IPv6. awk '{ print $2}' просто уменьшает вывод дальше до второй серии символов.

Маска сети может быть определена из /24 после IP-адреса.

Да, есть способ создавать свои собственные команды и получать информацию.

  • Чтобы получить свой IpAddress, сохраните следующую команду в любом файле, скажем myipaddr:

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $2}' | cut -f2 -d:
    
  • Аналогично, чтобы получить NetMask, сохраните следующую команду в файле скажем mymask:

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $4}' | cut -f2 -d:
    
  • Чтобы получить Bcast (подсеть), сохраните следующую команду в другом файле, скажем mysubnet:

    ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | awk '{print $3}' | cut -f2 -d:
    
  • Затем сделайте все файлы исполняемыми и скопируйте или переместите их в /bin каталог:

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

Теперь, чтобы получить желаемую информацию, вам нужно просто открыть терминал и выполнить любую из этих команд. Например:

    $ sudo myipaddr

Должно отображаться что-то вроде этого:

192.168.1.11

    $ sudo mymask

должно отображать что-то вроде:

255.255.255.0

    $ sudo mysubnet

должно отображать что-то вроде:

192.168.1.255

Другие вопросы по тегам