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. SpringBoot使用SpringSecurity搭建基于非对称加密的JWT及前后端分离的搭建

    SpringBoot使用SpringSecurity搭建基于非对称加密的JWT及前后端分离的搭建 - lhc0512的博客 - CSDN博客 https://blog.csdn.net/lhc0512 ...

  2. Design Pattern in Simple Examples

    Instead of defining what is design pattern lets define what we mean by design and what we mean by pa ...

  3. C# 反双曲余弦函数

    反双曲余弦函数的定义是: T1 = Math.Log(t + Math.Sqrt(t * t - 1)); 1. 叉乘(cross product),也叫向量的外积.向量积.顾名思义,求下来的结果是一 ...

  4. 如何用 testNG 生成测试报告

    原文地址https://testerhome.com/topics/3473 总结一下testNG生成报告的三种方式,基本都是我直接转载的,没有补充就不说了,有补充的我会加以说明的(这里直说生成报告, ...

  5. 工作记录之开发HRM项目总结

    开发HRM项目的步骤: 1:首先保留HRM项目中的两张表(Employee,Position)把这两张表中的数据内容复制到Operator-Portlet这个项目中,这两张表的service.xml配 ...

  6. RabittMQ实践(二): RabbitMQ 与spring、springmvc框架集成

    一.RabbitMQ简介 1.1.rabbitMQ的优点(适用范围)1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器.2. 健壮.稳定.易用.跨平台.支持多种语言.文档齐全.3. ...

  7. EditPlus 4.3.2475 中文版已经发布(10月28日更新)

    新的修订版修复了上移多个插入点时会造成程序崩溃的问题.

  8. 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础

    20145219<网络对抗技术>PC平台逆向破解之逆向与Bof基础 实践目标 实践对象:一个名为pwn1的linux可执行文件. pwn1正常执行流程:main调用foo函数,foo函数会 ...

  9. Cooperation.GTST团队第四周项目总结

    项目进展 这周我们的主要学习内容是: 1.研究学习如何导入博客详情页. 2.继续研究如何使用博客园的相关接口,导入相关jar包实现页面整体效果: 在我们使用其它APP或者上网浏览论坛.网页等时,通常都 ...

  10. 同样的输入,为什么Objects.hash()方法返回的hash值每次不一样?

    背景 开发过程中发现一个问题,项目中用Set保存AopMethod对象用于去重,但是发现即使往set中添加相同内容的对象,每次也能够添加成功. AopMethod类的部分代码如下: public cl ...