2

ПК с встроенным Linux имеет несколько сетевых интерфейсов, например, две карты Ethernet и один адаптер Wi-Fi (номера и типы могут различаться). Каждый из этих интерфейсов может быть подключен к сети (и может быть отключен), а сеть может быть подключена к Интернету (доступен сайт superuser.com ) и может быть подключена к локальной сети.

Я хочу написать bash-скрипт для получения (локального) IP-адреса и имени адаптера, который можно использовать для доступа в Интернет. Если несколько подключены - это должен быть тот, который будет использоваться браузером, который "запрашивается" для загрузки веб-страниц superuser.com . Если ни один подключенный скрипт не должен echo "internet unavailble"

Как написать условие проверки для такого скрипта? Как я могу даже перебрать все устройства с поддержкой сети в /dev/* в системе?

1 ответ1

3

Может быть, вам не нужно повторять. В моем Debian 9 (только IPv4, я не уверен, насколько это актуально) я могу использовать это:

ip route get "$(host superuser.com | awk 'NR==1 {print $NF}')" \
| grep -o "dev .* src [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"

где host (из пакета bind9-host ) - конвертировать superuser.com в его IP-адрес. Для обработки ошибок и т.д. Вам необходимо деконструировать канал и построить скрипт с некоторой логикой вокруг его частей.

Пример вывода:

dev wlan0  src 192.168.1.2

Чтобы все повторить, загляните в /sys/class/net:

cd /sys/class/net
ls
for interface in *; do
    printf "Doing something with %s\n" "$interface"
done

Эти устройства не находятся в /dev , по крайней мере, ни в одной из моих систем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .