Я пишу сценарий оболочки, которому нужна информация о состоянии сетевого подключения - базовые вещи, такие как 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
? Я слишком оптимистичен / наивен?
Спасибо :))
Вы также можете использовать 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
Да существует способ сделать Ваши собственные команды и получить Вашу информацию..
Для получения 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
Ну, вы можете попытаться получить и получить информацию из вывода следующим образом: 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-адреса.