как узнать, какой интерфейс я использую для подключения к интернету?

<p>я имею <code>eth0</code> а также <code>wlan0</code> в соответствии с <code>ifconfig</code> и я могу <code>ping google.com</code>.</p><p>как я могу узнать (с обычным пользователем, а не <code>root</code>), какой интерфейс <strong>активный</strong>, например, какой интерфейс использует пинг (или что-то еще, пинг не обязателен)?</p><p>я использую ubuntu 11.04 или fedora 14</p>

<p>вы можете использовать <code>route</code>, чтобы найти маршрут по умолчанию:</p><pre><code>$ route kernel ip routing table destination gateway genmask flags metric ref use iface 192.168.1.0  255.255.255.0 u 1 0 0 eth0 link-local  255.255.0.0 u 1000 0 0 eth0 default 192.168.1.1 0.0.0.0 ug 0 0 0 eth0 столбец iface в строке с адресатом default указывает, какой интерфейс используется.

моя версия, которая в основном основана на <a href="https://unix.stackexchange.com/a/14967">это и <a href="https://stackoverflow.com/a/22727242">это :route | grep '^default' | grep -o '[^ ]$' </code></pre><p>и это <em> экспериментально </em> для macos:</p><pre><code>route -n get default | grep 'interface:' | grep -o '[^ ]*$' 

в системах gnu/linux:<pre class="lang-bsh prettyprint-override">#!/bin/sh # host we want to "reach" host=google.com # get the ip of that host (works with dns and /etc/hosts. in case we get # multiple ip addresses, we just want one of them host_ip=$(getent ahosts "$host" | awk '{print $1; exit}') # only list the interface used to reach a specific host/ip. we only want the part # between dev and src (use grep for that) ip route get "$host_ip" | grep -po '(?<=(dev )).(?= src| proto)' 

один лайнер:ip route get 8.8.8.8 | sed -n 's/.dev ([^ ]) table./1/p'

получите сетевой интерфейс по умолчанию, который обычно используется для маршрутизации к "оставшемуся" интернету в противоположность dmz, частной сети, vm host и т.д.), которые обычно маршрутизируются явно.$ ip -4 route ls | grep default | grep -po '(?<=dev )(\s+)' eth0 </code></pre>

<p>запуск <code>ifconfig</code> даст вам необходимую информацию.</p><p>активный интерфейс будет иметь <code>inet addr</code> и покажет запись переданных данных, например:</p><pre><code>rx bytes:1930741 (1.8 mb) tx bytes:204768 (199.9 kb)</code></pre><p>вы также можете использовать команду <code>ip addr</code>, и любые неактивные интерфейсы будут обозначаться как: <code>no-carrier</code>.</p>

<p>команда <code>ip route ls</code> предоставит список активных маршрутов и их источников:</p><pre><code>caleburn: ~/ >ip route ls 192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.7 default via 192.168.10.254 dev eth0 </code></pre>

<p>используйте эту команду:</p><pre><code>$ route | grep default | awk '{print $8}' enp0s3 </code></pre>

<p>используйте ниже:</p><pre><code>ip r | grep default </code></pre>

<p>если ваша машина имеет несколько интерфейсов (что я предполагаю), то нет одного интерфейса, который будет использоваться для подключения к интернету.</p><p>в зависимости от пункта назначения, к которому вы подключаетесь, ваша система сверится с таблицей ip (показанной при выполнении команды <code>route</code>), чтобы найти следующую надежду/маршрутизатор, когда она найдет, она будет использовать интерфейс связано с этим.</p><p>тем не менее, пожалуйста, обратитесь к @ torgeir's <a href="https://unix.stackexchange.com/a/165067/284398">answer</a> , поскольку это именно так:</p><ol> <li>данный домен (жестко задан как google.com, что является единственным плохим моментом в ответе)</li> <li>решает это ip</li> <li>консультируется с таблицей ip для использования маршрута (и, следовательно, интерфейса).</li> </ol>

<p>различные дистрибутивы linux, unix, некоторые версии microsoft windows и многие другие операционные системы не ограничиваются использованием только одного сетевого интерфейса для доступа в интернет. многие операционные системы обнаруживают более одного действующего интерфейса, способного подключаться к интернету, и настраивают каждый из них для передачи трафика в интернет (в частности, шлюзы, которые в конечном итоге подключаются к интернету). если ос пытается связаться с внешней сетью и успешно использует <code>eth0</code>, он добавит этот интерфейс в таблицу маршрутизации и свяжет его с этой сетью. если ос пытается получить доступ к той же внешней сети, а также успешно использует <code>eth1</code>, он также добавит этот интерфейс (<code>eth1</code>) в таблицу маршрутизации как дополнительный способ доступа к той же сети. до сих пор другие авторы не рассматривали важность значений метрик в таблице маршрутизации. моя таблица маршрутизации ниже показывает два разных интерфейса, <code>eth0</code> а также <code>wlan0</code>. оба активны, оба были автоматически установлены операционной системой как маршруты по умолчанию к шлюзу <code>192.168.1.1</code>, и оба автоматически создали операционной системой маршрут к <code>192.168.1.x</code> сеть. вся эта таблица маршрутизации была написана ос автоматически. никакие правки к нему не были сделаны мной. разница, показанная здесь, в том, что интерфейс проводной сети ethernet (<code>eth0</code>) имеет более низкую метрику (202), и, таким образом, большая часть моего трафика на узлы за пределами моего будет направляться через этот интерфейс (предпочтительнее по более низкой метрике), а остальная часть моего трафика на узлы за пределами моей собственной воли маршрутизироваться через беспроводной интерфейс (<code>wlan0</code>) (он имеет более высокую метрику 303 и, следовательно, менее предпочтителен для ос).</p><pre><code>pi@raspberrypi:~ $ route kernel ip routing table destination gateway genmask flags metric ref use iface default 192.168.1.1 0.0.0.0 ug 202 0 0 eth0 default 192.168.1.1 0.0.0.0 ug 303 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 u 202 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 u 303 0 0 wlan0 оба интерфейса используются для доступа к "интернету", и их использование взвешивается значениями "метрика", как видно из статистики байтов и пакетов для eth0 и wlan0 ниже:pi@raspberrypi:~ $ ip -s address 1: lo: <loopback,up,lower\_up> mtu 65536 qdisc noqueue state unknown group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid\_lft forever preferred\_lft forever inet6 ::1/128 scope host valid\_lft forever preferred\_lft forever rx: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 tx: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 2: eth0: <broadcast,multicast,up,lower\_up> mtu 1500 qdisc mq state up group default qlen 1000 link/ether dc:a6:32:31:a2:c7 brd ff:ff:ff:ff:ff:ff inet 192.168.1.195/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0 valid\_lft 80787sec preferred\_lft 69987sec inet6 fe80::2f3f:3f1d:8c35:a05e/64 scope link valid\_lft forever preferred\_lft forever rx: bytes packets errors dropped overrun mcast 14341060 22393 0 0 0 971 tx: bytes packets errors dropped carrier collsns 1190274 10745 0 0 0 0 3: wlan0: <broadcast,multicast,up,lower\_up> mtu 1500 qdisc pfifo\_fast state up group default qlen 1000 link/ether dc:a6:32:31:a2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.1.193/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0 valid\_lft 80787sec preferred\_lft 69987sec inet6 fe80::4f31:5fcf:8f70:b5ca/64 scope link valid\_lft forever preferred\_lft forever rx: bytes packets errors dropped overrun mcast 4963408 7954 0 0 0 929 tx: bytes packets errors dropped carrier collsns 49371 235 0 0 0 0 </code></pre><p>легко видеть, что операционная система получает больше трафика от eth0. многие операционные системы предоставляют более низкий показатель для проводного интерфейса, который имеет более быстрое соединение, и более высокий показатель для проводного интерфейса с более медленным подключением. например, если <code>eth0</code> а также <code>eth1</code> оба подключаются к одному и тому же узлу, но <code>eth0</code> договорились о соединении 100 мб и <code>eth1</code> согласовано только соединение 10 мб, <code>eth0</code> будет иметь более низкую метрику, чем <code>eth1</code>. аналогичным образом, многие операционные системы будут предоставлять более низкий показатель для проводного интерфейса и более высокий показатель для беспроводного интерфейса.</p><p>можно настроить несколько интерфейсов автоматически (в зависимости от ос) или вручную, чтобы достичь одного и того же внешнего узла путем создания/редактирования записей в таблице маршрутизации.</p>