2009-09-21 8 views
0

네트워크 인터페이스 정보를 나열 할 수있는 ifconfig 명령이 있다는 것을 알고 있습니다. 는하지만 난 내가 ifconfig를 grep은 명령 시도 예를네트워크 인터페이스 정보 얻기

eth0 192.168.1.1 255.255.255.0 down

에 대해 다음 패턴

Interface_Name IP_Address Net_Mask Status(up/down)

에서 정보를 얻기 원하지만 바로 패턴을 얻을 수 없습니다. 다른 명령이나이를 수행하는 트릭이 있습니까?

답변

4

파이썬은 좋다 : D하지만 떠들썩한 파티에서 보자 :

Interfaces=`ifconfig -a \ 
    | grep -o -e "[a-z][a-z]*[0-9]*[ ]*Link" \ 
    | perl -pe "s|^([a-z]*[0-9]*)[ ]*Link|\1|"` 

for Interface in $Interfaces; do 
    INET=`ifconfig $Interface | grep -o -e "inet addr:[^ ]*" | grep -o -e "[^:]*$"` 
    MASK=`ifconfig $Interface | grep -o -e "Mask:[^ ]*"  | grep -o -e "[^:]*$"` 
    STATUS="up" 
    if [ "$INET" == "" ]; then 
     INET="-" 
     MASK="-" 
     STATUS="down"; 
    fi 
    printf "%-10s %-15s %-16s %-4s\n" "$Interface" "$INET" "$MASK" "$STATUS" 
done 

그것은 매우 간단합니다.

'ifconfig interface에는 인터넷 주소가 표시되지 않습니다'라는 가정하에 인터페이스가 작동 중지되었음을 의미합니다.

이 정보가 도움이되기를 바랍니다.

3

ifconfig에는 두 가지 출력 모드가 있습니다. 기본값은 출력이 많이 나오는 기본값이고, 작은 숫자는 -s입니다 (적은 값을 제공하거나 원하는 정보에서 다른 비트를 선택합니다) . 그렇다면 기본 모드에서 ifconfig를 사용하고 스크립트 (파이썬, 펄, 루비, awk, 배쉬 + sed + ...)에서 원하는 특정 정보를 체리 - 가져 오는 것은 어떻습니까? 예를 들어, 파이썬/w :

import re 
import subprocess 

ifc = subprocess.Popen('ifconfig', stdout=subprocess.PIPE) 
res = [] 
for x in ifc.stdout: 
    if not x.strip(): 
    print ' '.join(res) 
    del res[:] 
    elif not res: 
    res.append(re.match(r'\w+', x).group()) 
    else: 
    mo = re.match(r'\s+inet addr:(\S+).*Mask:(\S+)', x) 
    if mo: 
     res.extend(mo.groups()) 
    elif re.match(r'\sUP\s', x): 
     res.append('up') 
    elif re.match(r'\sDOWN\s', x): 
     res.append('down') 

if res: print ' '.join(res) 

당신은 (쉽게 내가 언급 한 다른 모든 언어로 번역하는 I 희망)가 원하는대로 출력이되어야한다.

0

ip 명령에 관심이있을 수 있습니다. 다음 예는 CIDR 표기법으로 출력하는 전역 적으로 유효한 IPv4 주소에 중점을 둡니다.

# list interfaces that are up 
ip -family inet -oneline addr show scope global | awk '{ printf "%s %s up\n", $2, $4 }' 

# list interfaces that are down 
ip -family inet -oneline link show scope global | grep ' DOWN ' | sed 's/\://g' | awk '{ printf "%s none down\n", $2}' 

(원하는 넷 마스크 표현이 예에서 생략합니다.) ip으로

은 매우 강력하다, 다른 매개 변수를 사용하여 더욱 깨끗한 솔루션을 찾을 수 있습니다.