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