ifconfig를 사용하여 활성 인터페이스 만 표시하는 방법


22

기본적으로 ifconfig사용 가능한 모든 인터페이스가 표시되지만 인터페이스 만 표시하려면 어떻게해야 active합니까? en0아래 에서처럼 .

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**

통지 ifconfig en0는 만족하지 않습니다, en0항상 활성화되지는 않습니다;)

Mac OS X를 실행하고 있습니다.


2
ifconfig구현 방법이 다양 하므로 OS는 언급해야 할 중요한 사항 입니다. 또한 왜 사용 ifconfig이 요구 되는가? 최종 목표는 무엇입니까?
jordanm

안녕하세요 @ jordanm, 내 목표는 현재 활성 인터페이스, 종종 무선 또는 유선 이더넷 인터페이스의 IP 주소를 얻는 것입니다.
qweruiop 2013

활성 인터페이스를 어떻게 정의합니까?
AnonymousLurker

답변:


24

모든 활성 서비스에 대한 완전한 설명을 얻으려면 다음을 시도하십시오.

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

이 간단한 정규식은 활성 인터페이스와 모든 정보 만 필터링해야합니다. ~ / .profile 또는 ~ / .bash_profile 파일에 이것에 대한 별칭을 넣는 것이 좋습니다.

인터페이스 이름 (스크립트에 유용함)을 얻으려면 다음을 사용하십시오.

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

이 작업 을하려면 pcregrep 을 설치 해야합니다. 그것은에의 MacPorts를 PCRE 패키지입니다. 또한,이 해야 GNU 그렙 사용 작업을 grep -Pzo대신 pcregrep -M -o하지만 나머지는 같은과,하지만이 테스트하지 않았습니다.


2

"entry"만 포함 status: active하고 싶다면이 awk 프로그램과 같은 것을 ifconfig 출력에 대한 필터로 사용할 수 있습니다 .

#!/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 }

각 "항목"이 시작되면 (행이 비어 있거나 탭으로 시작하지 않음) 항목을 버퍼에 저장하십시오. 탭으로 시작하는 모든 후속 행을이 버퍼에 추가합니다. 마법의 끈을 조심하십시오 status: active. 이와 같은 행이 보이면 새로운 "항목"이 시작될 때 (또는 입력이 종료 될 때) 버퍼 (이전의 "항목")를 인쇄하십시오.

위의 프로그램 텍스트를 파일에 저장하고 다음과 같이 사용하십시오.

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

또는 chmod +x파일 인 경우 약간 단순화 할 수 있습니다.

ifconfig -a | /path/to/file

2

bash 스크립팅에 불리하지 않은 경우 다음을 수행 할 수 있습니다.

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

활성 네트워크 인터페이스가 표시됩니다. Mac OS X 10.13에서 테스트되었습니다.

좋은 점은 아무것도 설치할 필요가 없다는 것입니다. 터미널에서 위를 실행하십시오.


이것이 가장 좋은 대답이어야하지만 ifconfig -lu데비안에서는 작동하지 않습니다. 그러나 OP는 어쨌든 MacOS를 사용 하므로이 솔루션은 BSD가있는 시스템에서 작동합니다 ifconfig. 다음을 사용하지 않고 동일한 답변을 게시했습니다.ifconfig -lu
Rakib Fiha

1

귀하의 의견과 질문을 읽으면 실제로 IP 주소가 할당 된 인터페이스를 얻으려는 것 같습니다.

ifconfig및 으로이 작업을 빠르게 수행 할 수 있습니다 grep.

명령을 실행합니다 :

ifconfig | grep 'Link\|inet'

다음과 유사한 것을 생성해야합니다.

eth0 링크 캡슐화 : 이더넷 HWaddr 00 : 11 : 22 : 33 : 44 : 55
eth1 링크 캡슐화 : 이더넷 HWaddr 00 : 11 : 22 : 33 : 44 : 66  
          inet addr : 192.168.0.8 Bcast : 192.168.0.255 마스크 : 255.255.255.0
lo 링크 encap : 로컬 루프백  
          inet addr : 127.0.0.1 마스크 : 255.0.0.0

인터페이스 이름과 IP가있는 경우 각 줄이 표시됩니다.

좀 더 구체적인 REGEX 마술은 필요한 것을 정확하게 얻을 수 있습니다.


2
고마워하지만 active고려 사항 은 어디에 있습니까?
qweruiop

인터페이스 다음에 줄이 있으면 IP 주소가 할당되고 내가 의미하는 바에 따르면 '활성'으로 구성됩니다.
Nathan McCoy

1

질문이 좀 더 명확하기를 바랍니다. 로 가정하면 Active interface only, 당신이 (내 경우 활성 인터페이스 만의 이름을 표시하는 의미 UPRUNNING상태를 active다른 세부 사항없이). 그런 다음 시도하십시오.

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

결과는 다음과 같습니다.

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

grep -v필드를 조정하고 필요한 경우 loopback-> lo등의 원하지 않는 인터페이스를 추가 하십시오.

원하는 경우 발견 된 인터페이스가 현재 활성화되어 있는지 확인해야합니다. 그런 다음 ifconfig <interface>아래 표시된 것처럼 간단히 인수로 전달할 수 있습니다.

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

이것을 더 단순화하고 함수로 구현하십시오.

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
}

이 기능을 실행하면 활성 인터페이스 만 반환됩니다. 나의 경우에는:

awdl0
en0
llw0



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

작동 방식 :

  • ifconfig
  • "inet addr"를 포함하는 줄에 대한 grep
    • 이 줄에는 IP가 포함되어 있습니다.
  • "127.0.0.1"을 포함하지 않는 라인에 대한 grep
    • 우리는 보통 localhost를 신경 쓰지 않습니다.
    • -v는 grep입니다
  • 나머지 줄에서 "Bcast"를 제거하십시오.
  • ":"을 구분 기호로 사용하여 필드 2 잘라 내기
    • 답을 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.