인터넷 연결에 사용중인 인터페이스를 찾는 방법은 무엇입니까?


47

ifconfig에 따라 eth0과 wlan0이 있고 할 수 있습니다 ping google.com. 핑 (또는 핑이 필수가 아닌) 인터페이스를 사용하는 것처럼 어떤 인터페이스가 활성화되어 있는지 (루트가 아닌 일반 사용자의 경우) 어떻게 알 수 있습니까?

참고 : Ubuntu 11.04 또는 Fedora 14 사용


2
아래 해결책은 당신이 추론을하기를 원하는 것 같습니다. (그리고 모두의 라우팅 테이블은 매우 간단 봐!)에서 Windows에 해당 찾고 있어요 있지만, 것으로 보인다 "IP 경로를 얻을 <IP 주소>"은 어떤 인터페이스를 알려줍니다 것이다 당신이에 연결을 시도 할 것 인 경우에 사용할 수 주어진 IP 주소.
mwardm

답변:


48

route기본 경로를 찾는 데 사용할 수 있습니다 .

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Iface대상이있는 줄 의 열에 default사용되는 인터페이스가 표시됩니다.


1
@Job IP 주소가있는 경우 사용하는 인터페이스를 어떻게 찾을 수 있습니까?
Bionix1441

1
이것은 정답이 아니어야합니다. iproute를 사용하여 사용자 지정 라우팅 규칙을 정의한 route경우 사용할 수 없습니다. @Torgeir는 라이트 답변을 가지고 있습니다.
조셉 가론

1
이 답변은 정확하지 않습니다. 예를 들어 (답에 동일한 경로가 표시됨) 192.168.1.16 (로컬 네트워크의 PC)을 ping하면 시작하는 항목이 192.168.1.0...사용될 경로입니다. 물론이 경우 동일한 Iface를 참조하지만 시스템에 하나의 인터페이스가 있기 때문입니다.
kdehairy

1
@Job google.com에서도 서로 다른 인터페이스에 두 개의 경로가있는 경우 더 긴 마스크와 일치하는 항목이 선택됩니다 (기본값은 아님). 모든 것이 무엇인지 기본 수단, 다른 경로가 발견되지 않은 경우의이 한 상담하자 :
kdehairy을

1
"default ... eth0"줄과 "default ... wlan0"줄이 나타납니다. 그렇다면 어느 것이 기본값입니까?
AstroFloyd

25

기본적으로 이것이것을 기반으로하는 내 버전 :

route | grep '^default' | grep -o '[^ ]*$'

그리고 이것은 실험적 으로 macOS의 경우 :

route -n get default | grep 'interface:' | grep -o '[^ ]*$'

1
OSX를 위해 이것을 번역하는 방법이 있습니까?
John Allard

1
@ JohnAllard : 내 업데이트가 macOS에 대한 올바른 답변을 제공하는지 알려주세요.
Ebrahim Byagowi

여러 개의 파이프가 필요하지 않습니다 route |awk '/^default/{print $NF}'
.

나는 "eth0"과 "wlan0"의 두 줄을 얻습니다. 그래서 여전히 어느 쪽이 활성인지 알 수 없습니다 ...
AstroFloyd

9

GNU / Linux 시스템에서 :

#!/bin/sh

# host we want to "reach"
host=google.com

# get the ip of that host (works with dns and /etc/hosts. In case we get  
# multiple IP addresses, we just want one of them
host_ip=$(getent ahosts "$host" | awk '{print $1; exit}')

# only list the interface used to reach a specific host/IP. We only want the part
# between dev and src (use grep for that)
ip route get "$host_ip" | grep -Po '(?<=(dev )).*(?= src| proto)'

1
이 명령들이 무엇을하는지 설명하십시오. 또한 값이 무엇인지 알기 때문에 아마도 꽤 안전 할 것입니다. 그러나 일반적으로 쉘 변수 참조를 인용해야합니다. ).
G-Man

1
어느 정도까지는 완료했습니다. 정확히 이것을 한 것을 찾을 수 없기 때문에 이것을 게시했습니다. 꼭두각시 매니페스트에서 이것을 사용자 지정 사실로 사용하고 있습니다.
Torgeir

host이 스크립트에 대한 입력 인수 인 경우 답변이 더 정확합니다 . 경로에 따라 (따라서 인터페이스) IP에 따라 다를 수 있습니다.
kdehairy

6

러닝 ifconfig은 필요한 정보를 제공합니다.

활성 인터페이스에는 다음 inet addr과 같이 전송 된 데이터의 기록이 표시됩니다.

RX bytes:1930741 (1.8 Mb)  TX bytes:204768 (199.9 Kb)

ip addr명령 을 사용할 수도 있으며 비활성 인터페이스는 다음과 같이 지정됩니다 NO-CARRIER..


OP는 루트가되고 싶지 않기 때문에 실행 파일에 대한 전체 경로를 제공해야합니까?
tshepang

두 명령 모두 상승 된 권한이 필요하지 않습니다.
jasonwryan

1
우분투와 아치 : 둘 다 정상적인 권한으로 실행됩니다 (우분투에서는 / sbin이지만)
JasonWryan

1
@Shadur하지 내 우분투 10.10의 설치에 따라 help.ubuntu.com/community/EnvironmentVariables 기본 $ 경로는/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
jasonwryan

2
포스터에 표시된 것처럼 여러 인터페이스가있는 시스템에서 반드시 도움이되는 것은 아닙니다. 더 나은 대답은 route명령을 사용하는 것이지만 라우팅으로 인해 반드시 그런 것은 아닙니다. 기본 경로는 종종 인터넷에 연결되는 경로 일 필요는 없습니다.
user1801810

6

짧막 한 농담:

ip route get 8.8.8.8 | sed -n 's/.*dev \([^\ ]*\) table.*/\1/p'


거기에 매달려있는 인용문이 있습니다. 전혀 작동하지 않습니다
Krease

@Krease Author는 자신의 답변을 업데이트했습니다
Vadim

5

일반적으로 명시 적으로 라우팅되는 DMZ, 개인 네트워크, VM 호스트 등과는 반대로 "남은"인터넷으로 라우팅하는 데 사용되는 기본 네트워크 인터페이스를 가져옵니다.

$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0

항상 원하는 곳으로가는 기본 경로는 아닙니다. OP가 인터넷에 접속하기 위해 기본 경로를 사용하고 있지만, 이것은 일반화이며 항상 적용되는 것은 아닙니다. 주의의 말씀
MelBurslan

물론 기본 네트워크 인터페이스 일뿐입니다. 연결이 여러 개인 경우 실제로 "인터넷에 연결"에 대한 것이 아니라 정확한 대상으로 라우팅하는 데 사용되는 네트워크 인터페이스에 대해 이야기해야합니다.
EugeneP

여러 개의 파이프 / 그립을 사용할 필요가 없습니다 ip -4 route ls |awk '/^default/{print $5}'
.

2

이 명령 ip route ls은 활성 경로 및 해당 소스 목록을 제공합니다.

caleburn: ~/ >ip route ls
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.7 
default via 192.168.10.254 dev eth0 

1

사용 명령 :

[root@linux1 network-scripts]# route|grep default | awk '{print $8}'
enp0s3

[root @ linux1 네트워크 스크립트] # route | grep 기본값 | awk '{print $ 8}'enp0s3 [root @ linux1 network-scripts] #
Larry Catt


0

컴퓨터에 여러 인터페이스가있는 경우 (내 생각에) 인터넷에 연결하는 데 사용할 인터페이스가 하나도 없습니다.

연결하려는 대상에 따라 시스템은 ip 테이블 ( route명령 을 수행 할 때 표시되는 것 )을 참조하여 다음 희망 / 라우터를 찾고,이를 찾을 때 연관된 인터페이스를 사용합니다.

즉, @torgeir의 답변 을 정확히 참조하십시오 .

  1. 도메인이 주어짐 (답변에서 유일한 나쁜 점인 google.com으로 하드 코드 됨)
  2. 그것은 IP를 해결
  3. 사용할 경로 (따라서 인터페이스)는 ip 테이블을 참조하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.