如何在Linux中查找网关IP地址


9

在Linux中,可以使用以下命令找到eth0的网关IP地址(即家庭路由器地址)?

我需要从命令行应用程序获取IP地址以在Shell脚本中使用。


您在寻找路由器的外部IP地址吗?过去,我使用屏幕抓取脚本从路由器设置页面获取此类信息。大多数家庭路由器都具有基于浏览器的设置,可以从内部轻松访问。很难给出一个通用的解决方案,但是您可以使用curl或wget来获取页面,然后使用grep&awk来获取IP地址。
汤姆·巴斯康

我的问题应该更清楚了。基本上,我想在具有单个以太网接口的盒子上找到设置为eth0的网关IP地址。巧合的是,这应该是家用的,基本的,Linksys类型的NAT路由器的IP地址。我需要它,因此可以在Shell脚本中对其执行ping操作。
J. Polfer 09年

似乎比我需要的要复杂,但是有一个很酷的,可以保证工作的想法。
J. Polfer 09年

Answers:


18

要仅打印默认的gw IP:

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

要在所有接口上打印路由信息:

route -n

要么

netstat -rn

UG不会要求接口启动吗?我认为仅G会更好。
J. Polfer,2009年

无论哪种方式,这都是正确的。许多感谢。
J. Polfer,2009年

想让您知道-我实际上正在使用此答案,但grep模式中只有G;我需要在机器上没有iptools来运行它。
J. Polfer 09年

2
您可以保存自己的grep,awk也可以过滤:route -n | awk '{if($4=="UG")print $2}'
Kenny Rasschaert 2011年

我建议route -n|awk '$4~/G/{print $2; exit(0)}'为第一个网关使用类似的方法,但ip route get IP会更好,因为它列出了将真正带到给定IP的路由,这很难route单独找到
Tino

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

是我的入口:)


我会改善这一点:ip route show 0.0.0.0/0 | awk'{print $ 3}'
Dominic Eidson

我不知道...我的击键次数仍然更少:)
MikeyB

并且cut是〜20倍以上轻二进制awk
K3 --- rnc 2015年

如果我放弃“ dev eth0”,那么它对eth0还是wlan0都有效?(如果我有足够长的局域网电缆,我会尝试这样做)
埃里克·纳尔逊

它为openwrt os对我有用:)
Joy Acharya


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是您的默认网关,在我的位置指向192.168.1.254。



2

我更喜欢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:不幸的是,这是一个错误的假设。Supermathie的建议更好。
Dominic Eidson,2009年

@Dominic Eidson-为什么?机器上只有一个物理以太网接口。
J. Polfer,2009年

1
到底是什么错误的假设?
Martin M.

2

还有谁比这短?=)

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

1
接受挑战:ip r | awk 'END{print $3}'短三个字符。
肯尼·拉沙特

不错,但是在带有KVM桥的本地debian / squeeze盒上,我的默认gw在第一行。奇怪但真实。因此,您的出色解决方案无法在任何地方使用:-/(无论如何+1)
ThorstenS

ip不是通用的UNIX命令-因此,它在任何地方都无法使用。

您是正确的,但是在$ Subject中代表Linux,而不是UNIX;)@David:哇,您的博客真不错!
ThorstenS

1
read x x i x< <(ip r g 1),结果在变量$ i中有待进一步使用
Tino

1

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

这将干净地打印网关IP。(如果没有awk, Linux脚本将是什么?)


然后,你不得不使用sed的,而不是...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }

0

如果要从interfaces文件获取网关:

#!/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

我的一个线性命令来获取默认网关IP地址:

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

-2

在Linux操作系统上打开终端通常取决于您使用的Linux发行版,它通常位于顶部或底部栏中。打开“终端”窗口后,输入以下命令“ ip route | IP”。grep default”,现在请稍等片刻,然后在屏幕上记下默认网关地址。您的网关地址应类似于192.168.1.1。知道路由器之后,就可以通过其网络管理面板开始配置路由器。

如果这不能解决您的网络问题,则可能需要新的路由器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.