簡體   English   中英

Shell - 獲取 IP 地址的接口名稱

[英]Shell - Get interface name of IP address

有沒有辦法在 Linux (GNU) 上查詢接口名稱和 IP 地址? 反之亦然,這似乎很簡單,但我完全需要它,因為我只有一個 IP 地址作為輸入,該地址分配給我系統的許多接口之一。 如何查出輸入的IP地址屬於哪個接口?

想象一下你有一個這樣的腳本:

ips=($(hostname -I))

PS3='Please select a network the master should listen onto: '
ips=($(hostname -I))
ips=("${ips[@]}" 'Quit')
select ip in "${ips[@]}"; do
  case $ip in
    *[0-9]*)
      break
      ;;
    Quit) echo quit
      break;;
    *) echo Invalid option >&2;;
  esac
done

echo "IP: $ip has been choosen for enrollment"

而現在想知道選擇的ip地址的接口名稱

提前致謝

您可以使用例如awk來解析ip addr的 output 以找到具有特定 Z957B527B527BCZE9 地址的接口名稱。 例如:

ip addr | awk -vtarget_addr=192.168.1.200 '
/^[0-9]+/ {
  iface=substr($2, 0, length($2)-1)
}

$1 == "inet" {
  split($2, addr, "/")
  if (addr[1] == target_addr) {
    print iface
  } 
}
'

這將查找地址為 192.168.1.200 的接口。 在我的系統上,這將打印:

vlan100

因為:

$ ip addr show vlan100
5: vlan100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 56:ba:dc:0f:73:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/32 brd 192.168.1.200 scope global noprefixroute vlan100
       valid_lft forever preferred_lft forever
    inet 192.168.1.169/24 brd 192.168.1.255 scope global dynamic noprefixroute vlan100
       valid_lft 47960sec preferred_lft 47960sec
    inet6 fe80::acb6:be79:224e:3062/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM