Android防火墙+流量统计代码,面试题+笔记+项目实战

data=ethdata[0]+“,”+ethdata[1]+“,”+ethdata[8]+“,”+ethdata[9]+“,”

+gprsdata[0]+“,”+gprsdata[1]+“,”+gprsdata[8]+“,”+gprsdata[9]+“,”

+wifidata[0]+“,”+wifidata[1]+“,”+wifidata[8]+“,”+wifidata[9];

String onstr=getinfo(ONPATH);//读取on.txt记录到onstr里

String ondata[]=onstr.split(“,”);//将onstr各项分离 放到ondata里

//计算增量

int [] delta=new int [12];

delta[0]=Integer.parseInt(ethdata[0])-Integer.parseInt(ondata[0]);

delta[1]=Integer.parseInt(ethdata[1])-Integer.parseInt(ondata[1]);

delta[2]=Integer.parseInt(ethdata[8])-Integer.parseInt(ondata[2]);

delta[3]=Integer.parseInt(ethdata[9])-Integer.parseInt(ondata[3]);

delta[4]=Integer.parseInt(gprsdata[0])-Integer.parseInt(ondata[4]);

delta[5]=Integer.parseInt(gprsdata[1])-Integer.parseInt(ondata[5]);

delta[6]=Integer.parseInt(gprsdata[8])-Integer.parseInt(ondata[6]);

delta[7]=Integer.parseInt(gprsdata[9])-Integer.parseInt(ondata[7]);

delta[8]=Integer.parseInt(wifidata[0])-Integer.parseInt(ondata[8]);

delta[9]=Integer.parseInt(wifidata[1])-Integer.parseInt(ondata[9]);

delta[10]=Integer.parseInt(wifidata[8])-Integer.parseInt(ondata[10]);

delta[11]=Integer.parseInt(wifidata[9])-Integer.parseInt(ondata[11]);

//读取log.txt

//获取当前时间

final Calendar c = Calendar.getInstance();

mYear = c.get(Calendar.YEAR); //获取当前年份

mMonth = c.get(Calendar.MONTH)+1;//获取当前月份

mDay = c.get(Calendar.DAY_OF_MONTH);//获取当前月份的日期号码

mHour = c.get(Calendar.HOUR_OF_DAY);//获取当前的小时数

mMinute = c.get(Calendar.MINUTE);//获取当前的分钟数

mdate=mYear+“-”+mMonth+“-”+mDay;

String text=getinfo(LOGPATH);//将log.txt的内容读到text字符串中

String [] line=text.split(“/n”);

String today=line[line.length-1];//获得今日已记录流量

String [] beToday=today.split(“,”);

//检查文件最后一行是否为今天的流量记录信息

if(!beToday[0].equals(mdate))//

//判断今日流量是否已经记录,如果今日流量没有记录

{

text=text+mdate+“,0,0,0,0,0,0,0,0,0,0,0,0/n”;

writefile(text,LOGPATH);

line=text.split(“/n”);

today=line[line.length-1];//获得今日已记录流量

beToday=today.split(“,”);

}

int i;

//处理今日流量

int [] newTodaydata=new int [12];//表示今日流量

String newtoday=mdate;

for(i=0;i<=11;i++)//更新今日流量

{

newTodaydata[i]=Integer.parseInt(beToday[i+1])+delta[i];

newtoday=newtoday+“,”+newTodaydata[i];

}

newtoday=newtoday+“/n”;

String [] beTotal=line[0].split(“,”);

int [] newTotaldata=new int [12];//表示总流量数值

//更新第一行

String newtotal=“total”;

for(i=0;i<=11;i++)//更新今日流量和总流量

{

newTotaldata[i]=Integer.parseInt(beTotal[i+1])+delta[i];//总流量数值+delta[i]更新

newtotal=newtotal+“,”+newTotaldata[i];

}

newtotal= newtotal+“/n”;

//处理中间不变的部分

String before=“”;//before为之前的从第1行到昨天的流量记录

for(i=1;i<=line.length-2;i++)

before=before+line[i]+“/n”;//代表中间不变的部分

String newlog=newtotal+before+newtoday;

writefile(data,ONPATH);//更新流量记录

writefile(newlog,LOGPATH);//更新log*/

}

}

public class mService1 extends Service

{

private Handler objHandler = new Handler();

private int intCounter=0;

private int mHour;

private int mMinute;

private int mYear;

private int mMonth;

private int mDay;

private String mdate;

final public String DEV_FILE = “/proc/self/net/dev”;//系统流量文件

String[] ethdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] gprsdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] wifidata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String data=“0,0,0,0,0,0,0,0,0,0,0,0”;//对应on.txt里面的格式

final String ETHLINE="  eth0";//以太网信息所在行

final String GPRSLINE=“rmnet0”;

final String WIFILINE=“tiwlan0”;

final String TEXT_ENCODING = “UTF-8”;

final public String ONPATH = “/data/data/zy.dnh/on.txt”;

final public String LOGPATH = “/data/data/zy.dnh/log.txt”;

private Runnable mTasks = new Runnable()

{

public void run()//运行该服务执行此函数

{

refresh();

intCounter++;

// DisplayToast(“Counter:”+Integer.toString(intCounter));

objHandler.postDelayed(mTasks, 30000);//每3000毫秒执行一次

}

};

@Override

public void onStart(Intent intent, int startId)

{

// TODO Auto-generated method stub

//writefile(“0,0,0,0,0,0,0,0,0,0,0,0”,ONPATH);//每次启动服务 初始化onpath

objHandler.postDelayed(mTasks, 0);

super.onStart(intent, startId);

}

@Override

public void onCreate()

{

// TODO Auto-generated method stub

super.onCreate();

}

@Override

public IBinder onBind(Intent intent)

{

// TODO Auto-generated method stub

return null;

}

@Override

public void onDestroy()

{

// TODO Auto-generated method stub

/*  */

objHandler.removeCallbacks(mTasks);

super.onDestroy();

}

public void DisplayToast(String str)

{

Toast.makeText(this,str,Toast.LENGTH_SHORT).show();

}

public void readdev()

{

FileReader fstream = null;

try {

fstream = new FileReader(DEV_FILE);

}

catch (FileNotFoundException e) {

DisplayToast("Could not read " + DEV_FILE);

}

BufferedReader in = new BufferedReader(fstream, 500);

String line;

String[] segs;

String[] netdata;

int count=0;

int k;

int j;

try {

while ((line = in.readLine()) != null) {

segs = line.trim().split(“:”);

if(line.startsWith(ETHLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

ethdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(GPRSLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

gprsdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(WIFILINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

wifidata[j]=netdata[k];

j++;

}

}

}

count++;

}

fstream.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

}

public String getinfo(String path)

{

File file;

String str=“”;

FileInputStream in;

try{

//打开文件file的InputStream

file = new File(path);

in = new FileInputStream(file);

//将文件内容全部读入到byte数组

int length = (int)file.length();

byte[] temp = new byte[length];

in.read(temp, 0, length);

//将byte数组用UTF-8编码并存入display字符串中

str =  EncodingUtils.getString(temp,TEXT_ENCODING);

//关闭文件file的InputStream

in.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

return str;

}

public void writefile(String str,String path )

{

File file;

FileOutputStream out;

try {

//创建文件

file = new File(path);

file.createNewFile();

//打开文件file的OutputStream

out = new FileOutputStream(file);

String infoToWrite = str;

//将字符串转换成byte数组写入文件

out.write(infoToWrite.getBytes());

//关闭文件file的OutputStream

out.close();

} catch (IOException e) {

//将出错信息打印到Logcat

DisplayToast(e.toString());

}

}

public void refresh()

{

readdev();//读取本次开机之后直到当前系统的总流量

data=ethdata[0]+“,”+ethdata[1]+“,”+ethdata[8]+“,”+ethdata[9]+“,”

+gprsdata[0]+“,”+gprsdata[1]+“,”+gprsdata[8]+“,”+gprsdata[9]+“,”

+wifidata[0]+“,”+wifidata[1]+“,”+wifidata[8]+“,”+wifidata[9];

String onstr=getinfo(ONPATH);//读取on.txt记录到onstr里

String ondata[]=onstr.split(“,”);//将onstr各项分离 放到ondata里

//计算增量

int [] delta=new int [12];

delta[0]=Integer.parseInt(ethdata[0])-Integer.parseInt(ondata[0]);

delta[1]=Integer.parseInt(ethdata[1])-Integer.parseInt(ondata[1]);

delta[2]=Integer.parseInt(ethdata[8])-Integer.parseInt(ondata[2]);

delta[3]=Integer.parseInt(ethdata[9])-Integer.parseInt(ondata[3]);

delta[4]=Integer.parseInt(gprsdata[0])-Integer.parseInt(ondata[4]);

delta[5]=Integer.parseInt(gprsdata[1])-Integer.parseInt(ondata[5]);

delta[6]=Integer.parseInt(gprsdata[8])-Integer.parseInt(ondata[6]);

delta[7]=Integer.parseInt(gprsdata[9])-Integer.parseInt(ondata[7]);

delta[8]=Integer.parseInt(wifidata[0])-Integer.parseInt(ondata[8]);

delta[9]=Integer.parseInt(wifidata[1])-Integer.parseInt(ondata[9]);

delta[10]=Integer.parseInt(wifidata[8])-Integer.parseInt(ondata[10]);

delta[11]=Integer.parseInt(wifidata[9])-Integer.parseInt(ondata[11]);

//读取log.txt

//获取当前时间

final Calendar c = Calendar.getInstance();

mYear = c.get(Calendar.YEAR); //获取当前年份

mMonth = c.get(Calendar.MONTH)+1;//获取当前月份

mDay = c.get(Calendar.DAY_OF_MONTH);//获取当前月份的日期号码

mHour = c.get(Calendar.HOUR_OF_DAY);//获取当前的小时数

mMinute = c.get(Calendar.MINUTE);//获取当前的分钟数

mdate=mYear+“-”+mMonth+“-”+mDay;

String text=getinfo(LOGPATH);//将log.txt的内容读到text字符串中

String [] line=text.split(“/n”);

String today=line[line.length-1];//获得今日已记录流量

String [] beToday=today.split(“,”);

//检查文件最后一行是否为今天的流量记录信息

if(!beToday[0].equals(mdate))//

//判断今日流量是否已经记录,如果今日流量没有记录

{

text=text+mdate+“,0,0,0,0,0,0,0,0,0,0,0,0/n”;

writefile(text,LOGPATH);

line=text.split(“/n”);

today=line[line.length-1];//获得今日已记录流量

beToday=today.split(“,”);

}

int i;

//处理今日流量

int [] newTodaydata=new int [12];//表示今日流量

String newtoday=mdate;

for(i=0;i<=11;i++)//更新今日流量

{

newTodaydata[i]=Integer.parseInt(beToday[i+1])+delta[i];

newtoday=newtoday+“,”+newTodaydata[i];

}

newtoday=newtoday+“/n”;

String [] beTotal=line[0].split(“,”);

int [] newTotaldata=new int [12];//表示总流量数值

//更新第一行

String newtotal=“total”;

for(i=0;i<=11;i++)//更新今日流量和总流量

{

newTotaldata[i]=Integer.parseInt(beTotal[i+1])+delta[i];//总流量数值+delta[i]更新

newtotal=newtotal+“,”+newTotaldata[i];

}

newtotal= newtotal+“/n”;

//处理中间不变的部分

String before=“”;//before为之前的从第1行到昨天的流量记录

for(i=1;i<=line.length-2;i++)

before=before+line[i]+“/n”;//代表中间不变的部分

String newlog=newtotal+before+newtoday;

writefile(data,ONPATH);//更新流量记录

writefile(newlog,LOGPATH);//更新log*/

}

}

应用iptable规则模块,通过运行iptable脚本来实现iptable规则的应用

view plaincopy to clipboardprint?

private static boolean applyIptablesRulesImpl(Context ctx, List uids, boolean showErrors) {

if (ctx == null) {

return false;

}

final SharedPreferences prefs = ctx.getSharedPreferences(PREFS_NAME, 0);

final boolean whitelist = prefs.getString(PREF_MODE, MODE_WHITELIST).equals(MODE_WHITELIST);

boolean wifi = false; // Wi-fi selected ?

final String itfs = prefs.getString(PREF_ITFS, ITF_3G);

String itfFilter;

if (itfs.indexOf(“|”) != -1) {

itfFilter = “”; // Block all interfaces

wifi = true;

} else if (itfs.indexOf(ITF_3G) != -1) {

itfFilter = “-o rmnet+”;;

// Block all rmnet interfaces

} else {

itfFilter = “-o tiwlan+”;;

// Block all tiwlan interfaces

wifi = true;

}

final StringBuilder script = new StringBuilder();

try {

int code;

script.append(“iptables -F || exit/n”);

final String targetRule = (whitelist ? “ACCEPT” : “REJECT”);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

Android学习PDF+学习视频+面试文档+知识点笔记

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

技术停滞不前!**

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-EwWA2UDp-1711377610626)]
[外链图片转存中…(img-sIYYOQfK-1711377610627)]
[外链图片转存中…(img-WOxcJqeF-1711377610627)]
[外链图片转存中…(img-NjwpxeQX-1711377610627)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-fCdfmYDQ-1711377610627)]

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

Android学习PDF+学习视频+面试文档+知识点笔记

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-lE1vtzb3-1711377610628)]

【Android高级架构视频学习资源】

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值