一般Linux操作中,多数用到的是根据网卡名称查询对应网卡名称的IP地址,但是反过来的用法一般不常见,也就是说,根据给定的网段信息,例如:192.168.1.*,查询对应的是哪块网卡,以及实际的IP地址是多少。
备注:这种情况多适用于实体机或虚拟机存在多块网卡,且IP地址均为DHCP自动分配的情况。该功能一般不常用,但以备不时之需。
#!/usr/bin/bash
#################################################################
# net.sh #
# Written by hanyu-Ko #
# Nov 20,2017 #
# #
# 根据网段查找网卡名称和ip地址 #
#################################################################
IP_ADDRESS=$2
help()
{
echo "The script by find interface name.
Usage: $0
find interface Name: $0 -f [ip]
Such as: $0 -f 192.168.1.*
"
}
find_name()
{
ls /sys/class/net/ > netname.txt
COUNT=`ls /sys/class/net/ | wc -l`
for ((i=1;i<=$COUNT;i++));
do
name=`cat netname.txt | awk NR==$i{print}`
dst=`ifconfig $name | grep $IP_ADDRESS | awk '{print $2}' | grep -o "[0-255].*"`
if [ ! -n "$dst" ] ;then
continue
else
echo $name
echo $dst
fi
done
}
OPTIND=1
while getopts "f:h" Option
do
case $Option in
f ) find_name;;
h ) help;;
* ) help;;
esac
done
OPTIND=1