如何动态查找连接到系统的接口的名称和类型

如何动态查找连接到系统的接口的名称和类型

我有一个用例,我需要动态配置一些文件,其中包括系统中存在的接口名称,例如eth0wlan0但是,当我更改系统时,有时会将其更改为eth1wlan1。从 Ubuntu 14.04 开始,以太网接口被命名为p2p1p1p1就像这样,无线接口被命名为wlan0wlan1

所以我们可以说接口名称可以是任何东西,只要我们能够找到给什么样的接口赋予什么名称就行。

我为此写了一个小脚本,但我不知道是否有更好的方法来找到适用于所有基于 Linux 的系统。

#!/bin/bash

# check if directory exist 
DIRECTORY=/sys/class/net
wifi_interface=""
lan_interface=""
if [ -d "$DIRECTORY" ]; then
    cd $DIRECTORY

    ilist=`ifconfig -s  | awk '{print $1}' | tail -n +2`

    # array length
    ilist_len=`echo "${ilist[@]}" | wc -l`

    # empty array 
    il=

    # Iterating over interfaces 
    for i in $(seq 1 $ilist_len)
    do 
        iname=`echo $ilist | sed -n "$i"p`
        echo $iname
        if [ "$iname" != "lo" ]; then
            cur_dir=$DIRECTORY/$iname
            cd $cur_dir
            if [ -d "$cur_dir/wireless" ]; then
                wifi_interface=$iname
            else 
                lan_interface=$iname
            fi
        fi
        pwd
        cd ~
    done
    exit 0
else
    echo "Can't find the directories ! Something went wrong "
    exit 0
fi

在上面的脚本中,我根据目录的存在与否决定了接口类型/sys/class/net/<INTERFACE>/wireless。该脚本假定以太网和无线仅存在 1-1 接口。

我怀疑该wireless目录是否始终存在于所有无线接口中。例如在虚拟无线接口的情况下。

答案1

今天,对于一个相对较新的 Linux 发行版,我首先会尝试使用 ip 命令

ip link show

然后过滤其输出以获取接口列表。

您也可以使用,ifconfig -a 但某些发行版的较新版本不再默认安装它。

同样也netstat -i可能有用。

您可以使用该iwconfig命令来确定接口是否是无线的

iwconfig ens160
ens160    no wireless extensions.

相关内容