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. codeforces#505--C Plasticine Zebra

    C. Plasticine zebra time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. 徐州网络赛J-Maze Designer【最小生成树】【LCA】

    After the long vacation, the maze designer master has to do his job. A tour company gives him a map ...

  3. Python爬虫基础(四)Requests库的使用

    requests文档 首先需要安装:pip install requests get请求 最基本的get: # -*- coding: utf-8 -*-import requests respons ...

  4. 优云老王的心路历程(二):下一站Web体验监控产品

    在上一篇文章中,和大家聊到了建立Web应用体验监控体系,经过了概念阶段,也完成了技术选型,就进入了把实质性的产品研发阶段.作为产品经理,时刻不敢忘记我们的产品目标:无限感知你的用户,建立完备的体验监控 ...

  5. 傅里叶变换 VS 拉普拉斯变换

    拉普拉斯变换的公式 傅里叶变换公式 拉普拉斯变换是将时域映射到s plane上,而傅里叶变换实际是将时域 映射在s-plane的虚轴上, 傅里叶变换可以看作拉普拉斯变换  的一种特例 1.推导傅里叶变 ...

  6. DataFrames与RDDs的相互转换

    Spark SQL支持两种RDDs转换为DataFrames的方式 使用反射获取RDD内的Schema     当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好. 通 ...

  7. Java小项目迷你图书管理系统

    package 迷你图书管理系统; import java.util.Scanner; public class BookMgr { public static void main(String[] ...

  8. cocos代码研究(13)Widget子类EditBox学习笔记

    理论基础 一个用来输入文本的类,继承自 Widget , 以及 IMEDelegate. 代码部分 Public枚举类型 enum KeyboardReturnType键盘的返回键类型. enum I ...

  9. web http协议

    http协议超文本传输协议 http协议是IOS七层协议的应用层,是基于TCP/IP协议的,为什么还要多一个协议了,其实利用TCP协议也是可以的,但是TCP三次握手后是一直保持连接的,如果单单是c/s ...

  10. 198. House Robber(动态规划)

    198. House Robber You are a professional robber planning to rob houses along a street. Each house ha ...