fre*_*set 8 linux networking ip netstat
在我的系统中,我有 eth0(可能已连接,也可能未连接)和 ppp0 上的调制解调器(它始终可能启动或关闭)。两个接口都up并且ppp0是默认路由的情况,我想找到一种方法来确定eth0的网关IP实际地址。我试过“netstat -rn”,但在这个配置中,输出是:
内核IP路由表 目标网关 Genmask 标志 MSS 窗口 irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
那么如何确定eth0的网关地址呢?在上述情况下,实际网关地址是 192.168.98.1。
您的错误是您将 netstat 输出上的信息与接口而不是目标相关联。目标地址可以有关联的网关。当您配置网络时,您将接口和网关与目标地址集相关联——因此您需要问的问题是“192.168.98/24 中目标的网关是什么?” 我打赌不应该有一个,该范围内的设备要么桥接要么直接连接到该以太网。
请注意,您的默认路由是 via ppp0(最后一行是通配符路由,掩码全为零,因此实际上没有比较任何位,因此这些地址的数据包通过 发送ppp0)。因此,任何目的地的数据包不在127.xx.xx.xx或192.168.98.xx最终将匹配通配符掩码并通过ppp0. 现在,因为它是一种点对点协议,在该接口上发送的每个数据包都会到达该链路上唯一可直接寻址的设备,即位于其另一端的设备。无需为其指定网关,因为通过该接口发送的每个数据包都是通过该设备发送的,无论其 Internet 目的地是否为该设备。
现在:如果您有一个可以访问的路由器eth0,那么您可以使用该路由器几乎可以肯定,该路由器的 IP 地址在 192.168.98.xx 范围内,至少有可能不是 192.168.98.1,并且当该路由器通电并且实际连接到 Internet 您希望使用默认路由,即所有未直接连接到本地网络的路由default via 192.168.98.1
您可能正在使用较新的(这是一个相对术语,它已经存在很长时间了)ip命令,请尝试ip route,如果这会给您一些输出 try ip route help。否则,尝试route help。
所以,你的eth0界面根本不具备网关地址。可能有另一个设备或多个设备连接到该以太网,愿意充当网关。你说你的网络有一个响应(纯粹传统的).1。没有法律规定它必须拥有该地址,也没有法律规定它必须宣传其存在。有一些常见的方法,其中最常见的方法是让运行路由软件的机器也运行 dhcp 服务器,并以这种方式告诉任何使用 dhcp 的人。 MolbOrg 的回答给出了一个非常典型的设置风格,但此时任何人可以提出的任何建议都只会或多或少地与您的特定网络相匹配。
小智 1
假设eth0是 DHCP 客户端接口。
一种选择是检查 DHCP 客户端租约文件dhcpd.leases
位置和名称取决于系统;在某些 Fedora 系统上,下面的文件/var/lib/dhclient/是租用文件,其中有趣的字符串如下所示:
option routers 192.168.1.1;
Run Code Online (Sandbox Code Playgroud)
另一个选项,对我在 funtoo 盒子上有用:dhcpcd -U eth0
打印一个漂亮的表格,准备在脚本中获取源代码
broadcast_address=192.168.1.255
dhcp_lease_time=86400
dhcp_message_type=5
dhcp_server_identifier=192.168.1.1
domain_name_servers='192.168.1.1 192.168.1.101'
ip_address=192.168.1.101
network_number=192.168.1.0
routers=192.168.1.1
subnet_cidr=24
subnet_mask=255.255.255.0
Run Code Online (Sandbox Code Playgroud)
根据谷歌和手册页,还有其他选项,例如dhcping,,但它们在我的盒子上失败,但可能对你有用。dhclient -n
| 归档时间: |
|
| 查看次数: |
33318 次 |
| 最近记录: |