最近在一個項目中用到了busybox,開始上網查找相關文檔,把本身整理的資料在這裏分享下。html
一、busybox是什麼?java
Busybox:是一個集成了許多經常使用linux命令和工具的軟件,能夠用來作許多事,這裏以項目中用例來講明。linux
二、安裝busybox:android
參考文檔:http://www.cnblogs.com/xiaowenji/archive/2011/03/12/1982309.html。數組
三、使用busybox查看網絡接口狀態:網絡
參數詳解:ide
eth0:表示網卡一;工具
HWaddr:表示網卡的物理地址; inet addr:表示網卡的ip地址; Bcast:表示廣播地址;Mask:掩碼地址;post
eth1:表示網卡二;測試
lo:表示localhoat,即127.0.0.1;
p2p0:表示網絡接口,關於p2p0詳情見:http://blog.csdn.net/mirkerson/article/details/38276629;
wlan0:表示無線網卡。
四、busybox在android項目中的使用:
在android項目中須要進行網口測試,即建立網橋實現局域網內互聯,測試網口使用情況,結合實例代碼說明以下:
String[] net_set_cmds = new String[] { "busybox ifconfig", "busybox ifconfig eth0 up", "busybox ifconfig eth1 up", "busybox brctl addbr br0", "busybox brctl addif br0 eth0", "busybox brctl addif br0 eth1", "busybox ifconfig eth0 0.0.0.0", "busybox ifconfig eth1 0.0.0.0", "busybox ifconfig br0 192.168.88.2 netmask 255.255.255.0", "busybox route add default gw 192.168.88.254", "busybox ifconfig" }; String[] net_restore_cmds = new String[] { "busybox ifconfig", "busybox brctl delif br0 eth0", "busybox brctl delif br0 eth1", "busybox ifconfig br0 down", "busybox brctl delbr br0", "busybox ifconfig eth0 up", "busybox ifconfig eth1 up", "busybox ifconfig" }; private void netSetting(final int step, final String[] cmd) { Log.i(TAG, "[netSetting].......................A"); if (step < cmd.length) { handler.post(new MyRunnable(cmd[step], new MyOnCommandResultListener(step, cmd))); } Log.i(TAG, "[netSetting].......................C"); } class MyOnCommandResultListener implements OnCommandResultListener { int step; String[] cmd; public MyOnCommandResultListener(int step, String[] cmd) { this.step = step; this.cmd = cmd; } @Override public void onResult(String result) { netSetting(++step, cmd); } } class MyRunnable implements Runnable { String cmd; OnCommandResultListener linstener; public MyRunnable(String strcmd, OnCommandResultListener onCommandResultListener) { cmd = strcmd; linstener = onCommandResultListener; } @Override public void run() { String result = CommonUtils.getInstance().executeCommand(cmd); if (linstener != null) { linstener.onResult(result); } } }
這裏使用java代碼實現了一個網橋的建立,主要看下其中的命令,net_set_cmds這個字符串數組是建立網橋的命令。
busybox ifconfig //會輸出當前網絡接口的狀況
busybox ifconfig eth0 up //啓動eth0設備
busybox ifconfig eth1 up //啓動eth1設備
busybox brctl addbr br0 //創建一個邏輯網段 delbr 刪除網段
busybox brctl addif br0 eth0 //讓eth0成爲br0的一個端口
busybox brctl addif br0 eth1 //讓eth1成爲br0的一個端口
busybox ifconfig eth0 0.0.0.0 //網橋的每一個物理網卡做爲一個端口,運行於混雜模式,並且是在鏈路層工做,因此就不須要IP了。
busybox ifconfig eth1 0.0.0.0 //
busybox ifconfig br0 192.168.88.2 netmask 255.255.255.0 //給br0配置ip和子網掩碼
busybox route add default gw 192.168.88.254 //添加默認網關
調用netSetting(0, net_set_cmds)就能夠實現網橋的建立,以後去ping相關ip查看是否ping通,就可檢測網口情況。
固然也能夠刪除網橋,恢復網絡狀態,其中net_restore_cmds這個字符串數組就是刪除網橋的命令。
busybox brctl delif br0 eth0 //從br0中刪除eth0端口
busybox brctl delif br0 eth1 //從br0中刪除eth1端口
busybox ifconfig br0 down //關閉邏輯網段br0
busybox brctl delbr br0 //刪除邏輯網段br0
busybox ifconfig eth0 up //啓動eth0設備
busybox ifconfig eth1 up //啓動eth1設備
值得注意的是:ifconfig 能夠用來配置網絡接口的IP地址、掩碼、網關、物理地址等;用ifconfig 爲網卡指定IP地址,這只是用來調試網絡用的,並不會更改系統關於網卡的配置文件。若是您想把網絡接口的IP地址固定下來,目前有三個方法:一是經過各個 發行和版本專用的工具來修改IP地址;二是直接修改網絡接口的配置文件;三是修改特定的文件,加入ifconfig 指令來指定網卡的IP地址,好比在redhat或Fedora中,把ifconfig 的語名寫入/etc/rc.d/rc.local文件中;