จะค้นหาอินเทอร์เฟซใดที่ฉันใช้สำหรับเชื่อมต่ออินเทอร์เน็ต


47

ฉันมี eth0 และ wlan0 ตาม ifconfig ping google.comและฉันสามารถ ฉันจะทราบได้อย่างไร (กับผู้ใช้ปกติไม่ใช่รูท) อินเทอร์เฟซใดที่แอ็คทีฟเหมือนในอินเทอร์เฟซใดที่ ping (หรืออะไรก็ตามที่ ping นั้นไม่บังคับ) ใช้?

หมายเหตุ: การใช้ Ubuntu 11.04 หรือ Fedora 14


2
วิธีแก้ไขด้านล่างดูเหมือนจะต้องการให้คุณทำสิ่งที่อนุมานด้วยตัวเองซึ่งดูไม่ถูกต้อง (และตารางเส้นทางของทุกคนดูตรงไปตรงมาอย่างไม่น่าเชื่อ!) ในขณะที่ฉันกำลังมองหา Windows ที่เทียบเท่ากันปรากฏว่า "ip route รับ <ip-address>" จะบอกคุณว่าจะใช้ส่วนต่อประสานใดหากคุณพยายามเชื่อมต่อกับ ที่อยู่ IP ที่ระบุ
mwardm

ที่เกี่ยวข้องกับข้อผิดพลาดเซิร์ฟเวอร์: ค้นหาอินเทอร์เฟซสำหรับเส้นทางไปยังโฮสต์ที่เฉพาะเจาะจง (ซึ่งเป็นสิ่งที่ฉันกำลังมองหาเมื่อฉันมาถึงที่นี่)
Wildcard

คำตอบ:


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จะไม่สามารถใช้ได้ @ Georgeir มีคำตอบไรท์
Joseph Garrone

1
คำตอบนี้ไม่ถูกต้อง ตัวอย่างเช่น (และให้เส้นทางเดียวกันกับที่แสดงในคำตอบ) หากคุณ ping 192.168.1.16 (พีซีในเครือข่ายท้องถิ่นของคุณ) รายการที่เริ่มต้นด้วย192.168.1.0...คือเส้นทางที่จะใช้ แน่นอนในกรณีนี้มันหมายถึง Iface เดียวกัน แต่นั่นเป็นเพียงเพราะคุณมีหนึ่งอินเทอร์เฟซบนเครื่องของคุณ
kdehairy

1
@Job ถึงแม้จะมี google.com หากคุณมีเส้นทางสองเส้นทางแต่ละเส้นทางบนอินเทอร์เฟซที่แตกต่างกันการจับคู่กับหน้ากากอีกต่อไปจะถูกเลือก (ไม่จำเป็นต้องเป็นค่าเริ่มต้น) ทุกสิ่งที่หมายถึงการเริ่มต้นคือว่าถ้าไม่มีเส้นทางอื่น ๆ ที่พบขอคำปรึกษาคนนี้ :)
kdehairy

1
ฉันได้รับบรรทัด "ค่าเริ่มต้น ... eth0" และบรรทัด "ค่าเริ่มต้น ... 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}'
P ....

ฉันได้สองบรรทัด: "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 กล่าวว่า 'Reinstate Monica'

1
เสร็จสิ้นในระดับหนึ่ง โพสต์เฉพาะสิ่งนี้เพราะฉันไม่พบสิ่งที่ทำอย่างนี้ กำลังใช้สิ่งนี้เป็นความจริงที่กำหนดเองในรายการหุ่น ...
Torgeir

คำตอบของคุณถูกต้องมากขึ้นถ้าhostอาร์กิวเมนต์เป็นอินพุตของสคริปต์ เนื่องจากเส้นทาง (และดังนั้นอินเทอร์เฟซ) อาจแตกต่างกันสำหรับ ips ที่แตกต่างกัน
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
อูบุนตูและประตูชัย: ทั้งสองวิ่งที่มีสิทธิ์ตามปกติ (แม้ว่าบน Ubuntu มันเป็น sbin /)
jasonwryan

1
@Shadur ไม่ได้ติดตั้ง Ubuntu 10.10 และเป็นไปตามhelp.ubuntu.com/community/EnvironmentVariablesค่าเริ่มต้น $ PATH คือ/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 ผู้เขียนอัปเดตคำตอบของเขา
Vadim Kotov

5

รับอินเทอร์เฟซเครือข่ายเริ่มต้นที่มักใช้เพื่อกำหนดเส้นทางไปยังอินเทอร์เน็ต "ที่เหลือ" ตรงข้ามกับ DMZ, เครือข่ายส่วนตัว, โฮสต์ VM ฯลฯ ซึ่งมักจะกำหนดเส้นทางอย่างชัดเจน

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

ไม่ใช่เส้นทางเริ่มต้นที่นำคุณไปยังที่ที่คุณต้องการ แม้ว่า OP ส่วนใหญ่อาจใช้เส้นทางเริ่มต้นเพื่อเชื่อมต่ออินเทอร์เน็ตนี่เป็นลักษณะทั่วไปและอาจไม่ถือเป็นจริงเสมอไป คำเตือน
MelBurslan

แน่นอนว่ามันเป็นเพียงส่วนต่อประสานเครือข่ายเริ่มต้น หากมีการเชื่อมต่อหลายรายการไม่ควรพูดถึง "การเชื่อมต่ออินเทอร์เน็ต" แต่ควรคำนึงถึงอินเทอร์เฟซเครือข่ายที่ใช้สำหรับการกำหนดเส้นทางไปยังปลายทางที่แน่นอน
EugeneP

คุณไม่จำเป็นต้องใช้หลายท่อ / greps,ip -4 route ls |awk '/^default/{print $5}'
P ....

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 default | awk '{print $ 8}' enp0s3 [root @ linux1 สคริปต์เครือข่าย] #
Larry Catt


0

หากเครื่องของคุณมีอินเตอร์เฟซหลายอัน (ซึ่งฉันคิดว่า) ไม่มีอินเทอร์เฟซเดียวที่จะใช้สำหรับเชื่อมต่อกับอินเทอร์เน็ต

ระบบของคุณจะปรึกษาตาราง ip (ที่แสดงเมื่อคุณทำrouteคำสั่ง) เพื่อค้นหาความหวัง / เราเตอร์ต่อไปเมื่อพบหนึ่งมันจะใช้อินเทอร์เฟซที่เกี่ยวข้อง

ที่กล่าวว่าโปรดดูคำตอบของ @ torgeir ตามที่:

  1. ได้รับโดเมน (hardcoded เป็น google.com ซึ่งเป็นจุดที่ไม่ดีเพียงคำตอบเดียว)
  2. แก้ไขมันเป็นไอพี
  3. พิจารณาตาราง ip สำหรับเส้นทางที่จะใช้ (และด้วยเหตุนี้อินเตอร์เฟส)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.