Как я могу получить неформатированную информацию 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? Я слишком оптимистичен / наивен?

Спасибо :))

3
задан 1 September 2013 в 23:29

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
0
ответ дан 1 September 2013 в 23:29

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

Например:

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

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

192.168.0.2/24
0
ответ дан 1 September 2013 в 23:29

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

  • Для получения 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
    

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

    $ sudo myipaddr

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

192.168.1.11

    $ sudo mymask

должен отобразить что-то как:

255.255.255.0

    $ sudo mysubnet

должен отобразить что-то как:

192.168.1.255

1
ответ дан 1 September 2013 в 23:29

Ну, вы можете попытаться получить и получить информацию из вывода следующим образом: 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-адреса.

0
ответ дан 1 September 2013 в 23:29

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

Похожие вопросы: