tcpflow是linux平台下的开源抓包工具,它能监听网络url,获取http请求的各种数据。tcpflow可以说是tcpdump的简约版。要想将tcpflow移植到Android平台中,就需要通过shell调用经NDK编译tcpflow后的可执行文件,以及它所依赖的库文件,因为Linux上的架构和Android上的arm架构不一样。网上没有tcpflow的中文资料,更别说移植到android了。如果用谷歌搜索,能搜到tcpflow的github站点以及相关英文资料,但是仍没有移植到Android上的。这就是我目前的工作内容,几乎每一步都是困难重重。

    整个步骤可以分为四步,第一步,在linux上用g++编译下载好的tcpflow源码,地址:https://github.com/simsong/tcpflow。第二步,理解源码,去掉多余的部分,毕竟Android上存储空间资源有限。第三步,用NDK将tcpflow源码以及它所依赖的lib库文件编译成可执行文件。第四步,通过java调用shell脚本,运行su,获取root权限,运行可执行程序。
    第一步,在linux上编译tcpflow源码。这一步是很关键,也很蛋疼,我花了整整一个星期。我用的是在vmware虚拟机上装的ubuntu12.04系统。首先,在终端通过git下载源码,下载好以后,进入tcpflow目录,执行sh bootstrap.sh,会生成markfile文件。执行./configure,会检查依赖库,如果缺少相应的库,会提示有错误,请用apt-get install安装相应的库。如果通过了,再执行make install,程序会被编译并运行起来。执行ifconfig,会列出本机上所有的网络接口,执行tcpflow -p -c -i eth0 port 80,-i 后面是网络接口名称。程序会监听网络接口eth0,打开浏览器,终端就会输出监听到的网络数据。数据可以在终端显示,也可以保存到文件中,还能生成报表。
    第二步,你可能需要定制自己的tcpflow项目,那就要去看源码了,譬如去掉生成报表,把数据写到一个文件中去。你也可以拓展,将文件发送到服务器上去,然后删除文件。    
  第三步,用NDK编译tcpflow源码,用的是Android.mk文件和Application.mk文件,Application.mk可以用来设置编译器的参数,譬如C++的标准输入输出,异常,rtti。由于tcpflow依赖libpcap,ssl,crypto等开源库,所以也需要用NDK编译上述开源库的源文件。
    第四步,由于监听网络接口,Android中需要root权限,也许可以用临时root。用java运行时取得shell通道,运行su,获取root权限,运行可执行程序。     后期的挑战在于临时root,文件的写入和发送,模块的调用。

Android下移植tcpflow的更多相关文章

  1. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  2. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  3. Android——程序移植 相关知识总结贴

    android 移植笔记有感 http://www.apkbus.com/android-11842-1-1.html   Android振动器系统结构和移植和调试 http://www.apkbus ...

  4. [百度空间] [原]跨平台编程注意事项(三): window 到 android 的 移植

    大的问题 先记录一下跨平台时需要注意的大方向. 1.OS和CPU 同一个操作系统, CPU也可能是不一样的, 比如windows也有基于arm CPU的版本,而android目前有x86,arm,mi ...

  5. Android系统移植与驱动开发----第一章

    第一章 Android系统移植与驱动开发 Android源代码定制完全属于自己的嵌入式系统,但是支持的设备不多,所以要移植,而在移植的过程中使用的不得不提的是驱动开发. Android系统构架主要包括 ...

  6. 详细介绍android rom移植知识普及

    详细介绍android rom移植知识普及 最近接到很多兄弟们的求助,也回答过无数个和下面这个问题类似的问题: 如何编译android 原生代码得到一个rom,然后跑到某某手机上. 鉴于很多兄弟对这块 ...

  7. NDK Android* 应用移植方法

    概述 本指南用于帮助开发者将现有的基于 ARM* 的 NDK 应用移植到 x86.假设您已经拥有一个正常执行的应用,须要知道怎样可以高速让 x86 设备在 Android* Market 中找到您的应 ...

  8. Android系统移植(一)-让android系统在目标平台上运行起来

    编号),文件系统采用ubifs格式,控制台设备为ttyS1,波特率为115200 启动的第一个应用程序是/init (6)确保控制台的设置和硬件保持一致,如:硬件上串口用的是UART1,则内核启动参数 ...

  9. 深入浅出 - Android系统移植与平台开发(一)

    深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkub ...

随机推荐

  1. C# WinForm实现任务栏程序图标闪烁

    相信大家在用QQ的时候都会知道,你打开了QQ聊天窗口,如果窗口不是当前激活的窗口的话,收到QQ消息时,任务栏(不是托盘图标)上的图标会闪一下变成黄色(Win7默认主题下),用以通知用户有消息进来了,之 ...

  2. SQL和access随机数

    Access: CLng(Rnd(种子数字)*1000000)   SQL Server ceiling(rand(abs(checksum(newid())))*1000000)    

  3. MVC项目,bootstrap升级后index.d.ts编译出错

    安装最新的Typescript组件 下载链接 https://www.microsoft.com/en-us/download/details.aspx?id=48593

  4. Postgresql 正则表达式(转)

    原文:http://blog.csdn.net/wugewuge/article/details/7704996 postgresql支持POSIX 风格的正则表达式,在postgresql中使用正则 ...

  5. 【Jenkins学习 】解决jenkins运行磁盘满的问题

    一.背景 今天有同事编译Jenkins的相关Jobs的时候,出现了编译成功,但是输出产物失败的情况,如下图所示: Caused by:java.io.IOException: No space lef ...

  6. GraphQL:一种不同于REST的接口风格

    从去年开始,JS算是完全踏入ES6时代.在React相关项目中接触到了一些ES6的语法.这次接着GraphQL这种新型的接口风格,从后端的角度接触ES6. 这篇文章从ES6的特征讲起,打好语法基础:然 ...

  7. PAT 1044 Shopping in Mars[二分][难]

    1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...

  8. Spring MVC 复习笔记04

    复习 springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以通 ...

  9. 日志处理(二) 日志组件logback的介绍及配置使用方法(转)

    本文转自:http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html http://www.cnblogs.com/yuanerm ...

  10. JAVA面试题整理(6)-JVM

    JVM 1.详细jvm内存模型 2.讲讲什么情况下回出现内存溢出,内存泄漏? 3.说说Java线程栈 4.JVM 年轻代到年老代的晋升过程的判断条件是什么呢? 5.JVM 出现 fullGC 很频繁, ...