android 操作路由表

附加说明;

有时候android系统不识别route 命令,则在命令前加个“ip”就可以了,具体原因知道是啥 么?

知道的朋友请回个帖子,谢谢了。

查看路由表:
cat /proc/net/route

增加一条路由:
ip route add 10.0.0.2/32 dev tiwlan0

删除一条路由:
ip route del 10.0.0.2/32

Linux中增加软路由的三种方法
Linux中增加软路由的三种方法,第一种:route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0/* 增加一条网络172.16.6.0/24 经过172.16.2.254 eth0 *//* -net增加网络 -host增加主机 netmask 子网掩码 gw 网关 dev 装置,设备,这里是你的网卡名*/route del gw 172.16.2.254 /* 删除默认网关172.16.2.254 */route del -net 172.16.86.0/24 /* 删除默认网络172.16.86.0 */route /* 显示当前路由表 */常用的是这种方式,但有时你在删除或一条软路由时会不起作用,会有什么提
示:SIOCADDRT: 无法接触网路所以这时用如下的这种方法就可以了第二种:实现的功能和上面的一样ip route add 172.16.6.0/24 via 172.16.2.254 dev eth0ip route del gw 172.16.2.254ip route del 172.16.6.0/24 dev eth0ip route

删除的方法:添加路由:

route add -net 10.0.0.0 netmask 255.0.0.0 dev eth0

删除路由:

route del -net 10.0.0.0 netmask 255.0.0.0 dev eth0

添加默认路由:

route add default gw 10.0.0.1

删除默认路由:

route del default gw 10.0.0.1

或者

route del default—————————————————————————————linux下添加路由的方法:

一:使用 route 命令添加

使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:

//添加到主机的路由

# route add –host 192.168.168.110 dev eth0

# route add –host 192.168.168.119 gw 192.168.168.1

//添加到网络的路由

# route add –net IP netmask MASK eth0

# route add –net IP netmask MASK gw IP

# route add –net IP/24 eth1

//添加默认网关

# route add default gw IP

//删除路由

# route del –host 192.168.168.110 dev eth0

二:在linux下设置永久路由的方法:

1.在/etc/rc.local里添加

方法:

route add -net 192.168.3.0/24 dev eth0

route add -net 192.168.2.0/24 gw 192.168.3.254

2.在/etc/sysconfig/network里添加到末尾

方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev

3./etc/sysconfig/static-router :

any net x.x.x.x/24 gw y.y.y.y

第三种 使用Linux+Zebra构建软路由系统Zebra是一种TCP/IP路由软件,它支持BGP-4、BGP-4+、OSPFv2、OSPFv3、RIPv1、RIPv2和RIPng。它符合GNU的GPL标准,可以运行在Linux和其它Unix变体系统上。Zebra是最先进的路由软件之一,最新版本可以从GUN Zebra Web站点上下载。

Zebra的基本设置

Zebra无后台交互程序是实实在在的路由管理程序。它控制着其它的软件模块,同时还提供与客户交互的主端口。Zebra RPM套件中包括一个完整的参考设置文件。但是,我们只需要建立一个包括以下内容的/etc/zebra/zebra.conf文件就可以对Zebra进行设置了。

最简单的Zebra设置文件:

hostname speedmetal

password zebra

enable password zebra

无论何时,当你进入交互式设置模式时,Hostname指令将指定路由器的名称。该名称可以任意设置,不一定和主机的名称相符。Password指令则确定交互式Zebra终端的登陆密码。

/etc/zebra/zebra.conf建立后,我们可以执行下列指令来启动zebra无后台交互程序:

# service zebra start

现在我们可以通过连接机器的2601端口进入Zebra交互对话模式。

Zebra对话模式实例:

[root@speedmetal zebra]# telnet 127.0.0.1 2601

Trying 127.0.0.1…

Connected to 127.0.0.1.

Escape character is ‘^]’.

Hello, this is zebra (version 0.93b).

Copyright 1996-2002 Kunihiro Ishiguro.

User Access Verification

Password: zebra

speedmetal> enable

Password: zebra

speedmetal# ?

configure Configuration from vty interface

copy    Copy configuration

debug   Debugging functions (see also ‘undebug’)

disable  Turn off privileged mode command

end    End current mode and change to enable mode.

exit    Exit current mode and down to previous mode

help    Description of the interactive help system

list    Print command list

no     Negate a command or set its defaults

quit    Exit current mode and down to previous mode

show    Show running system information

terminal  Set terminal line parameters

who    Display who is on vty

write   Write running configuration to memory, network, or terminal

speedmetal#

我们很容易就能对此了如指掌,因为可以通过点击屏幕上的?键随时了解某一命令的含义。如果有过配置Cisco路由

到目前为止,我们只完成了Zebra自身的设置和运行,对各种协议的设置还没有开始,如果你准备好了,就让我们继续吧。
案例1

2. 网络规划

路由器所在的Linux分别有两个网卡,ethO:192.168.1.1和eth1:192.168.10.1。

客户端A 所在网段为192.168.1.0/24,IP为192.168.1.2。客户端B所在网段为192.168.10.0/24,IP为192.168.10.2。

3. 配置路由器的网络设置

因为路由器所在Linux必须虚拟出两块网卡, 分别做为两个不同网段的网关,所以在下面的目录中会看到有两个文件,分别是ifcfg-eth0和ifcfgethl。它们分别是两个网卡的配置文件。

首先编辑ifcfg-eth0,让它的地址为192.168.1.1, 详细内容如下:

[root@rhel5~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.1.1

NETMASK=255.255.255.0

其次编辑ifcfg-eth1,让它的地址为192.168.10.1,详细内容如下:

DEVICE=eth1

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.10.1

NETMASK=255.255.255.0

现在重新启动一下网络服务,让网络配置生效。

如果以上操作都正确的话,那么下面就来安装和配置路由器。首先我们需要下载一个zebra-0.95b-1.i386.rpm,Linux下的路由器程序, 在RedHat的光盘里有这个RPM包。如果大家用的是别的版本Linux,可以到http://www.findrpm.com 里下载。到此为止,zebra成功安装完毕。下面再检查一下zebra是否真的安装成功:

[root@rhel5 my]#rpm -aq|grep zebra

zebra-0.95b-1

上面的结果说明已经安装成功了。现在启动zebra:

[rot@rhel5 my]#service zebra start

[rot@rhel5 my]#service ripd start

ripd进程主要是用来使用zebra配置支持RIP路由协议的,所以不但要启动zebra, 还要同时启动ripd。如果大家想在下次开机后自动运行路由器,那么执行如下命令:

[root@rhel5 my]chkconfig zebra on

[root@rhel5 my]chkconfig ripd on

下面来看一下zebra的配置文件:

[root@rhel5 zebra]#ls

ripd.conf vtysh.conf zebra.conf

上面代码中,vtysh.conf是配置zebra所用的Shell配置文件,zebra.conf是zebra的主配置文件。

为了使192.168.1.0/24和192.168.10.0/24网段机器能够互相通信,需要进行相关的配置。大家如果用过Cisco路由器的话就会很容易用zebra, 因为它们的命令几乎都是一样的。下面就开始配置客户端。

4.配置客户端的网络设置

首先配制客户端A 。修改ifcfg-eth0, 内容如下:

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.1.2

netmask=255.255.255.0

GATWAY=192.168.1.1

需要注意的是, 一定要把网关设置成我们刚才路由器的192.168.1.1网关。

[root@rhel5 my]#service network restart

重新启动网络服务后,客户A 的配置就算完成了。其次配置客户端B。配置B的方法其实和上面一样,不过有两个区别。客户端B的IP设置成192.168.10.2,网关改成192.168.10.1。就这两点有所不同。

添加路由的其他方法:

route add default dev DEVICE
route add default gw IP dev DEVICE
route add -net IP netmask NETMASK gw IP

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Android 应用内读取路由表需要使用系统权限,因此需要在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY"/> ``` 然后可以使用 ConnectivityManager 类的 getAllNetworks() 方法获取所有网络连接,并通过 Network 类的 getLinkProperties() 方法获取网络连接的路由表信息,示例如下: ```java ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); Network[] networks = connectivityManager.getAllNetworks(); for (Network network : networks) { LinkProperties linkProperties = connectivityManager.getLinkProperties(network); for (RouteInfo routeInfo : linkProperties.getRoutes()) { Log.d(TAG, "Route: " + routeInfo.toString()); } } ``` 需要注意的是,此方法需要 Android 6.0 及以上版本支持。 ### 回答2: 在 Android 应用内读取路由表,可以通过使用系统级别的API来实现。 首先,需要获取网络信息的权限,在 AndroidManifest.xml 文件中添加以下代码: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> ``` 然后,在代码中使用 ConnectivityManager 类来获取网络信息,并利用 NetworkInfo 类获取路由表信息。以下是示例代码: ```java ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { // WiFi网络 // 获取路由表信息 DhcpInfo dhcpInfo = connectivityManager.getDhcpInfo(); String gateway = Formatter.formatIpAddress(dhcpInfo.gateway); String subnetMask = Formatter.formatIpAddress(dhcpInfo.netmask); // 其他路由表信息... } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { // 移动网络 // 获取路由表信息 // ... } } ``` 上述代码首先通过 ConnectivityManager 的 getActiveNetworkInfo() 方法获取当前活动网络的信息,再通过 getType() 方法判断网络类型。如果是 WiFi 网络,则可以通过 getDhcpInfo() 方法获取路由表信息。以网关(gateway)和子网掩码(subnetMask)为例,使用 Formatter 类的 formatIpAddress() 方法将其转换为 IP 地址格式。 当然,以上示例仅仅是演示了如何在 Android 应用内读取路由表的基本步骤。根据实际需求,可能还需要处理一些网络状态的变化,或者通过其他更高级的 API 获取更详细的路由表信息。 ### 回答3: 在Android应用内读取路由表,可以使用以下方法: 1. 使用Java的NetworkInterface类获取设备的网络接口信息。通过NetworkInterface类的getNetworkInterfaces()方法可获取设备所有的网络接口,并使用NetworkInterface类提供的其他方法,如getInetAddresses()获取网络接口的IP地址等。 2. 使用Java的Process类执行shell命令,通过执行"ip route show"命令获取设备的路由表信息。可以使用ProcessBuilder类创建一个包含命令的进程,并通过Process类的getInputStream()方法获取命令执行的输入流,再通过读取输入流的方式获取命令的输出结果。 3. 使用Android的ConnectivityManager类获取设备的网络连接信息。通过ConnectivityManager类的getActiveNetworkInfo()方法获取当前活跃的网络连接对象,再使用该连接对象的getRouteInfo()方法获取网络连接的路由信息。 需要注意的是,以上方法需要在AndroidManifest.xml文件中添加相应的权限,如"android.permission.ACCESS_NETWORK_STATE"权限以获取网络连接信息。 希望以上方法能够帮助您在Android应用内读取路由表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值