ฉันสามารถเรียกใช้คำสั่งใดเพื่อรับที่อยู่ IP ของเราเตอร์ของฉันเท่านั้น
ด้วยคำสั่งนี้ฉันควรมีเฉพาะ IP ของเราเตอร์ของฉันเท่านั้นและไม่ใช่เช่นตารางเส้นทางทั้งหมด (เช่นเมื่อฉันเรียกใช้route -n
)
ฉันสามารถเรียกใช้คำสั่งใดเพื่อรับที่อยู่ IP ของเราเตอร์ของฉันเท่านั้น
ด้วยคำสั่งนี้ฉันควรมีเฉพาะ IP ของเราเตอร์ของฉันเท่านั้นและไม่ใช่เช่นตารางเส้นทางทั้งหมด (เช่นเมื่อฉันเรียกใช้route -n
)
คำตอบ:
หนึ่งสมุทร:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
nm-tool | grep -i gateway | awk '{print $2}
netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
arp -n | awk '{print $1}'
หมายเหตุ: ใช้งานได้เฉพาะเมื่อเครื่องของคุณเป็นเครือข่ายเดียวเท่านั้นip route show | grep -i 'default via'| awk '{print $3 }'
เอาท์พุท: 192.168.0.1
สำหรับฉัน
หมายเหตุ :
สำหรับ 15.04 และต่อมาก็ไม่มีดังนั้นการใช้งานnm-tool
nmcli dev show <IFACE>
ตัวอย่างเช่น,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
การแก้ไขและข้อมูลเพิ่มเติม
ดังที่คุณเห็นจากการตรวจสอบคำสั่งเรารับเอาท์พุทของnm-tool
(ซึ่ง, หมายเหตุ, รับข้อมูลจาก NetworkManager), ค้นหาบรรทัดที่มีคำgateway
, พิมพ์กว่าข้อมูลด้วย echo (คั่นด้วยช่องว่าง) แล้วตัดเฉพาะรายการที่สองของทั้งหมด เอาท์พุต โปรดทราบว่าหากคุณมีการเชื่อมต่อสองตัวขึ้นไปคุณอาจต้องถอดxargs echo | cut -d' ' -f2
ส่วนบนออกแล้วแทนที่ด้วยawk '{print $2}'
; ในคำอื่น ๆ nm-tool | grep -i gateway | awk '{print $2}'
ที่สายทั้งจะมีลักษณะเช่นนี้ หรือคุณอาจใช้nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
ตามที่ Avinash Raj เสนอในความคิดเห็น อย่างที่คุณเห็นไม่มีอะไรพิเศษทำที่นี่และการทดสอบทั้งหมดที่นี่เป็นเพียงการฝึกหัดในการใช้เครื่องมือแก้ไขผลลัพธ์เช่น cut, awk และ grep
อีกวิธีหนึ่งในการรับข้อมูลเกตเวย์คือnmcli dev list
คำสั่ง (ใช่ยังต้องพึ่งพาผู้จัดการเครือข่าย) nmcli
เป็นตัวจัดการเครือข่ายเวอร์ชันบรรทัดคำสั่ง คุณสามารถเรียกใช้หรือคุณอาจจะเรียกใช้nmcli dev list | grep -i routers
nmcli dev list | grep -i 'gw ='
คุณสามารถออกกำลังกายโดยการตัดข้อมูลอื่น ๆ ทั้งหมดยกเว้นที่อยู่ IP ที่ต้องการหากคุณต้องการ
เนื่องจากในคำถามเดิมข้อกำหนดเฉพาะคือการพิมพ์เกตเวย์เริ่มต้นเท่านั้นฉันอาศัยเอาท์พุทของเครื่องมือนาโนเมตรที่นี่ NetworkManager มาพร้อมกับ Ubuntu โดยค่าเริ่มต้นนี่เป็นวิธีมาตรฐานในการจัดการการเชื่อมต่อเครือข่ายของ Ubuntu หากคุณใช้อย่างอื่นเช่น wicd หรือเชื่อมต่อผ่าน wpa_cli เครื่องมือ nm จะไม่ให้คำตอบแก่คุณ ในกรณีเช่นนี้คุณอาจพบว่าคำตอบของคนอื่นนั้นมีประโยชน์มากกว่า
ตัวเลือกที่มากขึ้น distro ที่เป็นกลางและการกำหนดค่ากลางที่จะใช้ซึ่งใช้เส้นทางเคอร์เนลตารางคล้ายกับnetstat -n
route -n
เอาท์พุทมันร้องไม่มีอะไรน่าแปลกใจ
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
และนี่คือวิธีในการตัดข้อมูลที่คุณต้องการ: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
อีกหนึ่งความเป็นกลางเช่นกัน: arp -n | awk '{print $1}'
eth0
และwlan0
ทั้งการเชื่อมต่ออย่างแข็งขัน แต่มีประตูการกำหนดค่าเฉพาะในwlan0
, เอาท์พุทเพียงnm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
เอาท์พุทสองสาย: ตามมาด้วย ( และวิธีการผลิตเพียงซึ่งฉันจะพิจารณาผลลัพธ์ที่พึงประสงค์มากที่สุด)0.0.0.0
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
0.0.0.0
192.168.1.1
ip route ...
route -n ...
192.168.1.1
network-manager
เช่นโดยifupdown
หรือ .. ifconfig
ในกรณีเหล่านั้นnm-tool
จะไม่สร้างผลลัพธ์ที่ต้องการ .. โดยสรุปคำตอบนี้ขึ้นอยู่กับเครือข่ายที่ถูกจัดการโดยnetwork-manager
..
คุณสามารถค้นหาได้หลายวิธี
ip route show default
คำถามที่ดีกว่าคุณต้องการสร้างผลลัพธ์หรือไม่อย่างไร
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
จากความคิดเห็น - (ขอบคุณ Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
เพียงแค่tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
จะเป็น 5in
ตามปกติroute -n
คุณจะสามารถลองใช้sed
วิธีแก้ปัญหานี้ควบคู่ไปกับroute -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
นี่คือการทดสอบ:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
192.168.1.1
อีกวิธีหนึ่งคือการใช้grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
ในฐานะที่เป็น @AwinashRaj ได้ชี้ให้เห็นสิ่งนี้สามารถทำได้โดยใช้เพียงgrep
(ไม่จำเป็นต้องบีบช่องว่างโดยใช้tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
grep เพียงอย่างเดียวจะทำงานได้route -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
ฉันใช้อันนี้ค่อนข้างบ่อย:
route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
192.168.0.1
อะไร?
หากคุณเข้าถึงเว็บเบราว์เซอร์ในระบบคุณสามารถไปที่http://whatsmyrouterip.com/และควรจะสามารถหาไอพีของคุณได้โดยไม่ต้องมีคำสั่งใด ๆ
มิฉะนั้นเพียงเปิดเทอร์มินัลและการทำip route | grep default
ควรจะเพียงพอ อาจให้มากกว่าหนึ่งขึ้นอยู่กับส่วนต่อประสานเครือข่ายของคุณ
ฉันใช้สิ่งนี้บ่อยและง่ายต่อการจดจำ:
route | grep default | awk '{print $2}'
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
ดังนั้นเพื่อให้ได้เฉพาะปัญหา IP
hostname -I | cut -d' ' -f1
190.200.200.107
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'