Yalnızca etkin arabirimi göstermek için ifconfig nasıl kullanılır


22

Varsayılan olarak ifconfigbana tüm kullanılabilir arayüzleri gösterecektir, ancak sadece bunları görüntülemek istersem ne olur active? Mesela, en0sadece aşağıda.

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 14:10:9f:e0:eb:c9 
    inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4 
    inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    **status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 32:00:14:e7:4f:80 
    media: autoselect <full-duplex>
    **status: inactive**

Uyarı ifconfig en0tatmin en0olmaz, her zaman aktif değildir;)

Mac OS X kullanıyorum.


2
ifconfigUygulamalar farklı olduğundan işletim sisteminizden bahsetmek önemli bir şey olacaktır . Ayrıca, kullanım neden ifconfigbir gerekliliktir? Son hedefin nedir?
jordanm

Merhaba @jordanm, amacım şu anda aktif olan arabirimin, genellikle kablosuz veya kablolu bir Ethernet arabiriminin IP adresini almaktır.
qweruiop

aktif arayüzü nasıl tanımlıyorsunuz?
AnonymousLurker

Yanıtlar:


24

Tüm etkin hizmetlerin tam bir açıklamasını almak için şunu deneyin:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'

Bu basit normal ifade yalnızca etkin arabirimleri ve tüm bilgilerini filtrelemelidir. Bunun için bir takma ad ~ / .profile veya ~ / .bash_profile dosyanıza koymanızı öneririm (belki aktif değilse?)

Yalnızca arabirim adını almak için (komut dosyaları için yararlıdır) şunu kullanın:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+'

Bunun çalışması için pcregrep yüklemeniz gerekir . Pcre paketindeki macports üzerinde . Alternatif olarak, bunun yerine GNU grep ile çalışması gerekirgrep -Pzo , pcregrep -M -oancak geri kalanı aynıdır, ancak bunu test etmedim.


2

“Girdi” yi yalnızca içeriyorsa yazdırmak istiyorsanız , ifconfig çıktısına filtre olarak status: activebu awk programı gibi bir şey kullanabilirsiniz :

#!/usr/bin/awk -f
BEGIN            { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/     { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/            { buffer = buffer "\n" $0 }
END              { if(print_it) print buffer }

Her bir "giriş" başladığında (bir satır boşsa veya Sekme ile başlamıyorsa), girişi bir arabellekte kaydetmeye başlayın. Sekme ile başlayan sonraki satırları bu arabelleğe ekleyin. Sihirli ipi izleyin status: active; böyle bir çizgi görülüyorsa, yeni bir “giriş” başladığında (veya giriş sona erdiğinde) tamponu (önceki “giriş”) yazdırın.

Yukarıdaki program metnini bir dosyaya kaydedin ve şöyle kullanın:

ifconfig -a | awk -f /path/to/file

Ya da, chmod +xdosyaysanız, biraz basitleştirebilirsiniz:

ifconfig -a | /path/to/file

2

Bazı bash komut dosyalarına karşı olumsuz değilseniz, bunu yapabilirsiniz:

for i in $(ifconfig -lu); do if ifconfig $i | grep -q "status: active" ; then echo $i; fi; done

Bu, aktif ağ arayüzlerini listeleyecektir. Mac OS X 10.13 üzerinde test edilmiştir.

Güzel olan şey, hiçbir şey yüklemenize gerek olmamasıdır. Yukarıdakileri bir Terminalde çalıştırın.


Bu en iyi cevap olmalı, ancak ifconfig -ludebian üzerinde çalışmayacak. Ancak OP yine de MacOS kullanıyor, bu nedenle bu çözüm BSD'li sistemlerde işe yarayacaktı ifconfig. Aşağıda, kullanmadan da aynısını yapan başka bir cevap yayınladımifconfig -lu
Rakib Fiha

1

Yorumlarınızı ve sorunuzu okuduğunuzda, aslında kendilerine bir IP adresi atanmış arayüzleri almak istediğiniz görülüyor.

Bunu hızlı bir şekilde ifconfigve ile yapabilirsiniz grep.

Komutu çalıştırma:

ifconfig | grep 'Link\|inet'

Şuna benzer bir şey üretmelidir:

eth0 Bağlantı alanı: Ethernet HWaddr 00: 11: 22: 33: 44: 55
eth1 Bağlantı alanı: Ethernet HWaddr 00: 11: 22: 33: 44: 66  
          inet adresi: 192.168.0.8 Yayın: 192.168.0.255 Maske: 255.255.255.0
lo Bağlantı encap: Yerel Geridöngü  
          inet adresi: 127.0.0.1 Maske: 255.0.0.0

Bu, her satırı bir arabirim adı ile ve varsa IP ile gösterir.

Bazı daha spesifik REGEX sihri tam olarak ihtiyacınız olanı alabilir.


2
Teşekkürler ama activedikkate nerede ?
qweruiop

arabirimden sonra bir satır varsa, ona atanmış bir IP adresi vardır ve topladığımla ifade etmek gerekirse, 'aktif' anlamına gelir.
Nathan McCoy

1

Sorunun biraz daha açık olmasını dilerdim. Bununla birlikte Active interface only, başka hiçbir ayrıntı olmadan yalnızca etkin arabirimlerin adını (benim durumumda UPve RUNNINGdurumumda active) göstermek istediniz. Sonra şunu deneyin:

ifconfig | \
  grep "UP\|RUNNIG" \
  | awk '{print $1}' \
  | grep ':' \
  | tr -d ':' \
  | grep -v lo

Çıktı şöyle görünecektir:

en0
en1
en2
bridge0
p2p0
awdl0
llw0
utun0
utun1
utun2
utun3
en6

grep -vAlanı ayarlayın ve gerekirse loopback-> lovb. Gibi istenmeyen arabirimler ekleyin .

Şimdi, isterseniz ve bulunan arayüzlerin şu anda aktif olup olmadığını kontrol etmeniz gerekir. Sonra bunları ifconfig <interface>aşağıda gösterildiği gibi bir argüman olarak aktarabiliriz :

[[ $(ifconfig en0 | grep -w active) ]] && echo "en0 is active"

Bunu daha da basitleştirmek ve bir işlevde uygulamak:

checkActiveInterfaces()
{
  local intARR=( $(ifconfig | \
      grep "UP\|RUNNIG" \
      | awk '{print $1}' \
      | grep ':' \
      | tr -d ':' \
      | grep -v lo) );
    intARR=( $(printf "%s\n" "${intARR[@]}" | sort -u) );
    for i in "${intARR[@]}"; do
      [[ $(ifconfig $i | grep -w active) ]] && {
       echo "$i"
    }
    done
}

Bu işlevin yürütülmesi yalnızca etkin arabirimleri döndürür. Benim durumumda:

awdl0
en0
llw0

0

Aşağıda yalnızca IP'si olacak şekilde yapılandırılmış arabirimler yazdırılacaktır

ifconfig | grep "inet.*broadcast"

0

Yalnızca ACTIVE arayüz MAC'lerini edinin:

cat /sys/class/net/$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')/address

MacOS'un ipvarsayılan olarak olmadığını unutmayın; bunun için HomeBrew'a ihtiyacınız var, sonra bir brew install iproute2mackez çalıştırın . Kaynak kodu github.com/brona/iproute2mac adresinde
Jeroen Wiert Pluimers

-1
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2

Nasıl çalışır:

  • ifconfig
  • "İnet addr" içeren satırlar için Grep
    • Bu satırlar IP'leri içerir.
  • "127.0.0.1" içermeyen satırlar için Grep
    • Biz genellikle localhost'u umursamıyoruz.
    • -v ters grep
  • Kalan satırlardan "Bcast" i kaldırın
  • Sınırlayıcı olarak ":" kullanarak alan 2'yi kesin
    • Cevabı yazdırır.

-1
ifconfig en0 | grep status

Bu, en0 ethernet bağlantısının durumunu gösterecektir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.