Làm cách nào để hiển thị (chỉ) địa chỉ IP của bộ định tuyến của tôi?


22

Tôi có thể chạy lệnh nào để chỉ lấy địa chỉ IP của bộ định tuyến?

Với lệnh này, tôi chỉ nên có IP của bộ định tuyến của mình và không, ví dụ, toàn bộ bảng định tuyến (như khi tôi chạy route -n).

Câu trả lời:


22

Một lớp lót:

  • 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}' Lưu ý: chỉ hoạt động nếu máy của bạn là thiết bị duy nhất trên mạng
  • ip route show | grep -i 'default via'| awk '{print $3 }'

đầu ra: 192.168.0.1cho tôi

LƯU Ý :

Đối với 15.04 và sau đó, không có nm-tool, vì vậy sử dụng nmcli dev show <IFACE>. Ví dụ,

$ nmcli dev show wlan7 | grep GATEWAY                                                                                    
IP4.GATEWAY:                            192.168.0.1
IP6.GATEWAY:                            

Chỉnh sửa và thông tin bổ sung

Như bạn có thể thấy khi kiểm tra lệnh, chúng tôi lấy đầu ra nm-tool(trong đó, ghi chú, lấy thông tin từ NetworkManager), tìm dòng chứa từ gateway, in hơn thông tin có tiếng vang (cách nhau bởi khoảng trắng), và sau đó chỉ cắt bỏ mục thứ hai trong toàn bộ đầu ra. Lưu ý rằng nếu bạn có hai hoặc nhiều kết nối ở đó, bạn có thể cần xargs echo | cut -d' ' -f2một phần loại bỏ hàng đầu và thay thế nó bằng awk '{print $2}'; nói cách khác, toàn bộ dòng sẽ như thế này nm-tool | grep -i gateway | awk '{print $2}'. Ngoài ra, bạn có thể đã sử dụng nm-tool | grep -oP '(?i)gateway:\s*\K\S+'theo đề xuất của Avinash Raj trong các bình luận. Như bạn có thể thấy không có gì đặc biệt được thực hiện ở đây, và toàn bộ thử thách ở đây chỉ đơn thuần là một bài tập trong việc sử dụng các công cụ chỉnh sửa đầu ra như cắt, awk và grep.

Một phương pháp khác để có được thông tin cổng thông qua lệnh nmcli dev list(có, vẫn dựa vào trình quản lý mạng). nmclilà phiên bản dòng lệnh của trình quản lý mạng. Bạn có thể chạy nmcli dev list | grep -i routershoặc bạn có thể chạy nmcli dev list | grep -i 'gw ='. Một lần nữa, bạn có thể thực hiện việc cắt tất cả các thông tin khác ngoại trừ địa chỉ IP mong muốn, nếu bạn muốn.

Vì trong câu hỏi ban đầu, đặc điểm kỹ thuật duy nhất là chỉ in cổng mặc định, tôi đang dựa vào đầu ra của công cụ nm ở đây. NetworkManager đi kèm với Ubuntu theo mặc định, đây là cách tiêu chuẩn để quản lý các kết nối mạng của Ubuntu. Nếu bạn sử dụng một cái gì đó khác, như wicd hoặc kết nối thông qua wpa_cli, công cụ nm sẽ không cung cấp cho bạn câu trả lời. Trong trường hợp như vậy, bạn có thể thấy câu trả lời của người khác dưới đây hữu ích hơn.

Một tùy chọn trung lập hơn và trung lập cấu hình sẽ được sử dụng netstat -n, sử dụng bảng định tuyến kernel, tương tự như route -n. Đó là đầu ra dưới đây, không có gì đáng ngạc nhiê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

Và đây là cách để cắt bỏ thông tin mong muốn của bạn: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Một số khác, trung tính là tốt: arp -n | awk '{print $1}'


đơn giảnnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj

@AvinashRaj Cảm ơn! Tôi chưa nghiên cứu về grep và awk chuyên sâu để vận hành kiến ​​thức tôi đã có. Điều này sẽ rất tốt để biết
Sergiy Kolodyazhnyy

Có lẽ điều này là do một số đặc thù (bổ sung) trong cấu hình của tôi, nhưng trên một máy có bộ điều hợp eth0wlan0cả hai được kết nối tích cực nhưng chỉ có một cổng được cấu hình wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2chỉ xuất ra 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'đầu ra hai dòng: 0.0.0.0theo sau 192.168.1.1. (Cách thức ip route ...route -n ...cách sản xuất chính xác 192.168.1.1, mà tôi sẽ xem xét kết quả mong muốn nhất.)
Eliah Kagan

Điều này sẽ không hoạt động nếu mạng không được quản lý bởi network-managervd ifupdownhoặc ifconfig.. trong những trường hợp đó nm-toolsẽ không tạo ra đầu ra mong muốn..trong khi đó, câu trả lời này chỉ dựa vào mạng được quản lý bởi network-manager..
heemayl

@EliahKagan À, tôi hiểu rồi. Trong trường hợp lệnh của tôi, nó tìm thấy các dòng có 'gateway' trong đó, sau đó lặp lại nó như một dòng cách nhau bởi khoảng trắng và cắt bỏ mục thứ hai trong đó. Bởi vì bạn có hai dòng như vậy ở đó, lệnh của tôi chỉ in một trong số chúng. Lệnh của Avinash tốt hơn trong trường hợp này. Đối với 0.0.0.0, đây là một cái gì đó liên quan . Đối với nhận xét của heemayl, vâng, đó là sự thật và không có thông số kỹ thuật nào trong câu hỏi của OP ngoài việc chỉ hiển thị đầu ra
Sergiy Kolodyazhnyy

7

Bạn có thể tìm thấy nó theo nhiều cách

ip route show default

Một câu hỏi tốt hơn, những gì hoặc làm thế nào để bạn muốn định hình đầu ra?

ip route show | awk '/default/ {print $3}'

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq

Từ các bình luận - (cảm ơn bạn Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'

bạn không cần o uniqchỉ tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'là 5in.
Avinash Raj

Rất nhiều sự lựa chọn. Trên hệ thống của tôi, nó in hai lần w / o uniq. Giải pháp YOur cũng hoạt động.
Panther


Nhân tiện, @ bodhi.zazen, có sự thay đổi trong câu trả lời của bạn, hãy sử dụng traceroute. Cùng một ý tưởng khác nhau, phải không?
Sergiy Kolodyazhnyy

@serg chắc chắn, có lẽ có một danh sách dài các lệnh và tùy chọn lọc, sed, awk, perl, grep ...
Panther

6

Như bạn thường sử dụng route -n, bạn có thể thử sedgiải pháp này cùng với route -n:

route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 

Đây là một bài kiểm tra:

$ 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

Một cách khác là sử dụng grep:

$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1

Như @AvinashRaj đã chỉ ra điều này có thể được thực hiện bằng cách chỉ sử dụng grep(không cần phải nén các khoảng trắng bằng cách sử dụng tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1

bạn không cần sử dụng tr, một mình grep sẽ thực hiện công việcroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj

1

Tôi sử dụng cái này khá thường xuyên:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'

Nếu địa chỉ là 192.168.0.1gì?
Avinash Raj

1

Nếu bạn có quyền truy cập vào trình duyệt web trên hệ thống, bạn có thể truy cập http://whatsmyrouterip.com/ và nó sẽ có thể tìm thấy ip của bạn mà không cần bất kỳ lệnh nào.

Nếu không, chỉ cần mở thiết bị đầu cuối và làm một ip route | grep defaultlà đủ. Nó có thể cung cấp nhiều hơn một tùy thuộc vào giao diện mạng của bạn tho.


0

Tôi sử dụng điều này khá thường xuyên và dễ nhớ:

route | grep default | awk '{print $2}'

0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

vì vậy chỉ nhận được vấn đề IP

hostname -I | cut -d' ' -f1 

190.200.200.107

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.