จะแสดงที่อยู่ IP ของเราเตอร์ของฉันได้อย่างไร


22

ฉันสามารถเรียกใช้คำสั่งใดเพื่อรับที่อยู่ IP ของเราเตอร์ของฉันเท่านั้น

ด้วยคำสั่งนี้ฉันควรมีเฉพาะ IP ของเราเตอร์ของฉันเท่านั้นและไม่ใช่เช่นตารางเส้นทางทั้งหมด (เช่นเมื่อฉันเรียกใช้route -n)

คำตอบ:


22

หนึ่งสมุทร:

  • 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}'


ง่ายnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj

@AvinashRaj ขอบคุณ! ฉันไม่ได้ศึกษา grep และ awk ในเชิงลึกมากดังนั้นการดำเนินการกับความรู้ที่ฉันมีอยู่แล้ว นี่จะเป็นเรื่องดีที่จะรู้
Sergiy Kolodyazhnyy

บางทีนี่อาจเป็นเพราะบางคน (เพิ่มเติม) ความผิดปกติของการกำหนดค่าของฉัน แต่ในเครื่องที่มีอะแดปเตอร์eth0และwlan0ทั้งการเชื่อมต่ออย่างแข็งขัน แต่มีประตูการกำหนดค่าเฉพาะในwlan0, เอาท์พุทเพียงnm-tool | grep -i gateway | xargs echo | cut -d' ' -f2 เอาท์พุทสองสาย: ตามมาด้วย ( และวิธีการผลิตเพียงซึ่งฉันจะพิจารณาผลลัพธ์ที่พึงประสงค์มากที่สุด)0.0.0.0nm-tool | grep -oP '(?i)gateway:\s*\K\S+'0.0.0.0192.168.1.1ip route ...route -n ...192.168.1.1
Eliah Kagan

สิ่งนี้จะไม่ทำงานหากเครือข่ายไม่ได้ถูกจัดการโดยnetwork-managerเช่นโดยifupdownหรือ .. ifconfigในกรณีเหล่านั้นnm-toolจะไม่สร้างผลลัพธ์ที่ต้องการ .. โดยสรุปคำตอบนี้ขึ้นอยู่กับเครือข่ายที่ถูกจัดการโดยnetwork-manager..
heemayl

@EliahKagan อ่าเข้าใจแล้ว ในกรณีที่คำสั่งของฉันพบว่ามีบรรทัดที่มี 'เกตเวย์' อยู่ในนั้นจากนั้นสะท้อนเป็นหนึ่งบรรทัดคั่นด้วยช่องว่างและตัดรายการที่สองในนั้น เนื่องจากคุณมีสองบรรทัดดังกล่าวคำสั่งของฉันจึงพิมพ์หนึ่งบรรทัดเท่านั้น คำสั่งของ Avinash ดีกว่าในกรณีนี้ ในฐานะที่เป็น 0.0.0.0 นี่เป็นบางสิ่งบางอย่างที่เกี่ยวข้อง สำหรับความคิดเห็นของ heemayl ใช่ว่าเป็นเรื่องจริงและไม่มีข้อกำหนดในคำถามของ OP นอกเหนือจากเพื่อแสดงผลลัพธ์
Sergiy Kolodyazhnyy

7

คุณสามารถค้นหาได้หลายวิธี

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}'

คุณไม่จำเป็นต้อง o uniqเพียงแค่tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'จะเป็น 5in
Avinash Raj

ทางเลือกมากมาย ในระบบของฉันมันพิมพ์สองครั้งโดยไม่ต้องระบบ โซลูชันของคุณยังใช้งานได้
Panther

หมายเหตุtracepathสนับสนุน-mในบางรุ่นของ Ubuntuแต่ไม่ได้กับคนอื่น ๆ
Eliah Kagan

อย่างไรก็ตาม @ bodhi.zazen คำตอบของคุณมีความหลากหลายให้ใช้ traceroute ความคิดเดียวกันคำสั่งที่แตกต่างกันใช่มั้ย
Sergiy Kolodyazhnyy

@serg แน่ใจว่าอาจมีรายการคำสั่งและตัวเลือกการกรองที่หลากหลาย, sed, awk, perl, grep ...
Panther

6

ตามปกติ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

คุณไม่จำเป็นต้องใช้trgrep เพียงอย่างเดียวจะทำงานได้route -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj

1

ฉันใช้อันนี้ค่อนข้างบ่อย:

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อะไร?
Avinash Raj

1

หากคุณเข้าถึงเว็บเบราว์เซอร์ในระบบคุณสามารถไปที่http://whatsmyrouterip.com/และควรจะสามารถหาไอพีของคุณได้โดยไม่ต้องมีคำสั่งใด ๆ

มิฉะนั้นเพียงเปิดเทอร์มินัลและการทำip route | grep defaultควรจะเพียงพอ อาจให้มากกว่าหนึ่งขึ้นอยู่กับส่วนต่อประสานเครือข่ายของคุณ



0
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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.