ฉันมี eth0 และ wlan0 ตาม ifconfig ping google.com
และฉันสามารถ ฉันจะทราบได้อย่างไร (กับผู้ใช้ปกติไม่ใช่รูท) อินเทอร์เฟซใดที่แอ็คทีฟเหมือนในอินเทอร์เฟซใดที่ ping (หรืออะไรก็ตามที่ ping นั้นไม่บังคับ) ใช้?
หมายเหตุ: การใช้ Ubuntu 11.04 หรือ Fedora 14
ฉันมี eth0 และ wlan0 ตาม ifconfig ping google.com
และฉันสามารถ ฉันจะทราบได้อย่างไร (กับผู้ใช้ปกติไม่ใช่รูท) อินเทอร์เฟซใดที่แอ็คทีฟเหมือนในอินเทอร์เฟซใดที่ ping (หรืออะไรก็ตามที่ ping นั้นไม่บังคับ) ใช้?
หมายเหตุ: การใช้ Ubuntu 11.04 หรือ Fedora 14
คำตอบ:
คุณสามารถใช้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
จะบอกคุณที่อินเตอร์เฟซที่ถูกนำมาใช้
route
จะไม่สามารถใช้ได้ @ Georgeir มีคำตอบไรท์
192.168.1.0...
คือเส้นทางที่จะใช้ แน่นอนในกรณีนี้มันหมายถึง Iface เดียวกัน แต่นั่นเป็นเพียงเพราะคุณมีหนึ่งอินเทอร์เฟซบนเครื่องของคุณ
เวอร์ชันของฉันซึ่งใช้พื้นฐานจากสิ่งนี้และสิ่งนี้ :
route | grep '^default' | grep -o '[^ ]*$'
และนี่คือการทดลองสำหรับ macOS:
route -n get default | grep 'interface:' | grep -o '[^ ]*$'
route |awk '/^default/{print $NF}'
บนระบบ 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)'
host
อาร์กิวเมนต์เป็นอินพุตของสคริปต์ เนื่องจากเส้นทาง (และดังนั้นอินเทอร์เฟซ) อาจแตกต่างกันสำหรับ ips ที่แตกต่างกัน
การวิ่งifconfig
จะให้ข้อมูลที่คุณต้องการ
อินเทอร์เฟซที่ใช้งานจะมีinet addr
และจะแสดงบันทึกข้อมูลที่ส่งเช่น:
RX bytes:1930741 (1.8 Mb) TX bytes:204768 (199.9 Kb)
นอกจากนี้คุณยังสามารถใช้ip addr
คำสั่งและการเชื่อมต่อใช้งานใด ๆ NO-CARRIER
ที่จะได้รับมอบหมายให้เป็นผู้ที่มี:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
route
คำสั่งแม้ว่าจะไม่สามารถป้องกันได้อย่างสมบูรณ์เนื่องจากการกำหนดเส้นทาง เส้นทางเริ่มต้นไม่จำเป็นต้องเป็นเส้นทางที่จะเข้าสู่อินเทอร์เน็ตแม้ว่าอาจเป็น
หนึ่งในสายการบิน:
ip route get 8.8.8.8 | sed -n 's/.*dev \([^\ ]*\) table.*/\1/p'
รับอินเทอร์เฟซเครือข่ายเริ่มต้นที่มักใช้เพื่อกำหนดเส้นทางไปยังอินเทอร์เน็ต "ที่เหลือ" ตรงข้ามกับ DMZ, เครือข่ายส่วนตัว, โฮสต์ VM ฯลฯ ซึ่งมักจะกำหนดเส้นทางอย่างชัดเจน
$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
ip -4 route ls |awk '/^default/{print $5}'
คำสั่ง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
ใช้คำสั่ง:
[root@linux1 network-scripts]# route|grep default | awk '{print $8}'
enp0s3
หากเครื่องของคุณมีอินเตอร์เฟซหลายอัน (ซึ่งฉันคิดว่า) ไม่มีอินเทอร์เฟซเดียวที่จะใช้สำหรับเชื่อมต่อกับอินเทอร์เน็ต
ระบบของคุณจะปรึกษาตาราง ip (ที่แสดงเมื่อคุณทำroute
คำสั่ง) เพื่อค้นหาความหวัง / เราเตอร์ต่อไปเมื่อพบหนึ่งมันจะใช้อินเทอร์เฟซที่เกี่ยวข้อง
ที่กล่าวว่าโปรดดูคำตอบของ @ torgeir ตามที่: