Cách tìm địa chỉ IP gateway trong Linux


9

Lệnh nào bạn có thể sử dụng để tìm Địa chỉ IP Gateway (tức là địa chỉ bộ định tuyến gia đình) cho eth0 trong Linux?

Tôi cần lấy địa chỉ IP từ một ứng dụng dòng lệnh để sử dụng trong tập lệnh shell.


Bạn đang tìm kiếm địa chỉ IP bên ngoài của bộ định tuyến? Trước đây, tôi đã sử dụng một kịch bản cạo màn hình để lấy thứ đó từ các trang thiết lập bộ định tuyến. Hầu hết các bộ định tuyến gia đình có một thiết lập dựa trên trình duyệt dễ dàng truy cập từ bên trong. Thật khó để đưa ra một giải pháp chung nhưng bạn có thể sử dụng curl hoặc wget để tìm nạp trang và sau đó sử dụng grep & awk để lấy địa chỉ IP.
Tom Bascom

Tôi nên đã rõ ràng hơn trong câu hỏi của tôi. Về cơ bản, tôi muốn tìm địa chỉ IP cổng được đặt thành eth0 trên hộp có giao diện ethernet duy nhất. Thật trùng hợp, đây phải là địa chỉ IP của một bộ định tuyến NAT, cơ bản, loại Linksys hoặc đại loại. Tôi cần nó để tôi có thể ping nó trong một kịch bản shell.
J. Polfer

Có vẻ phức tạp hơn những gì tôi cần, nhưng một ý tưởng tuyệt vời, được đảm bảo để làm việc mặc dù.
J. Polfer

Câu trả lời:


18

Để chỉ in IP gw mặc định:

route -n | grep 'UG[ \t]' | awk '{print $2}'

Để in thông tin tuyến đường trên tất cả các giao diện:

route -n

hoặc là

netstat -rn

UG sẽ không yêu cầu giao diện phải không? Tôi nghĩ chỉ cần G sẽ tốt hơn.
J. Polfer

Dù bằng cách nào, đây là tại chỗ. Nhiều Thanx.
J. Polfer

Muốn cho bạn biết - tôi thực sự đang sử dụng câu trả lời này, nhưng chỉ với một chữ G trong mẫu grep; không có iptools trên máy tôi cần chạy cái này.
J. Polfer

2
Bạn có thể tiết kiệm cho mình grep, awk cũng có thể lọc:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert

Tôi sẽ đề xuất một cái gì đó giống như route -n|awk '$4~/G/{print $2; exit(0)}'cho cổng đầu tiên, nhưng ip route get IPtốt hơn, bởi vì nó liệt kê tuyến đường sẽ thực sự được đưa đến IP đã cho, rất khó tìm routemột mình
Tino

9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

là mục của tôi :)


Tôi sẽ cải thiện điều này: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson

Tôi không biết ... tôi vẫn còn ít tổ hợp phím hơn :)
MikeyB

cutlà ~ 20 lần nhẹ hơn nhị phân awk.
K3 --- rnc

Nếu tôi bỏ "dev eth0" thì nó có hoạt động cho eth0 hoặc wlan0 không? (Tôi sẽ thử điều này nếu tôi có cáp lan đủ dài)
Eric Nelson

Nó hoạt động với tôi cho openwrt os :)
Joy Acharya

5

Bạn có thể lấy cổng mặc định của hệ thống từ đầu ra của netstat -rhoặcroute


3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

0.0.0.0 là cổng mặc định của bạn, trỏ đến 192.168.1.254 tại vị trí của tôi.


2

Đầu ra từ tuyến -n hoặc netstat -rn và tìm kiếm đích 0,0.0.0.


2

Tôi thích gói iproute :

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'

@sheepsimulator: Thật không may, đây là một giả định tồi để thực hiện. Đề nghị của siêu mẫu là tốt hơn.
Đaminh Eidson

@Dominic Eidson - Tại sao? Chỉ có một giao diện ethernet vật lý trên máy.
J. Polfer

1
chính xác một giả định xấu là gì?
Martin M.

2

có ai ngắn hơn thế này không? =)

ip r | awk '/^def/{print $3}'

1
Thử thách được chấp nhận: ip r | awk 'END{print $3}'ngắn hơn ba ký tự.
Kenny Rasschaert

tốt, nhưng trên hộp debian / bóp cục bộ của tôi với cầu nối KVM, gw mặc định của tôi nằm ở dòng một. lạ nhưng có thật. Vì vậy, giải pháp tuyệt vời của bạn không hoạt động ở mọi nơi: - / (dù sao +1)
ThorstenS

ip không phải là một lệnh UNIX chung - vì vậy một lần nữa nó sẽ không hoạt động ở mọi nơi.
Mei

bạn đúng, nhưng trong $ Tiêu đề là Linux chứ không phải UNIX;) @David: wow, bạn có blog thực sự tốt!
ThorstenS

1
read x x i x< <(ip r g 1), kết quả là biến $ i để sử dụng tiếp
Tino

1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

Điều này sẽ in sạch IP gateway. (kịch bản linux sẽ là gì nếu không có awk ?)


Sau đó, bạn phải sử dụng sed thay thế ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Nếu bạn muốn lấy cổng từ tệp giao diện:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi

0

Lệnh one liner của tôi để lấy địa chỉ IP gateway mặc định:

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

-2

Mở Terminal trên HĐH Linux của bạn Nó thường nằm ở thanh trên cùng hoặc thanh dưới cùng, tùy thuộc vào bản phân phối Linux bạn sử dụng Một khi bạn đã mở cửa sổ Terminal, hãy nhập các lệnh sau đây ip ip tuyến | grep mặc định Bây giờ hãy đợi một giây cho đầu ra và lưu ý địa chỉ cổng mặc định của bạn trên màn hình Địa chỉ cổng của bạn sẽ trông giống như 192.168.1.1. Khi bạn biết điều đó, bạn có thể bắt đầu định cấu hình bộ định tuyến của mình thông qua bảng quản trị web.

Nếu điều này không khắc phục được mạng của bạn, bạn có thể cần một bộ định tuyến mới.

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.