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. Pycharm一直报ImportError: No module named requests

    1.首先检查是否安装了requests l 安装命令:pip install requests如果出现了Requirement already satisfied 代表安装成功 2.系统含有多个版本的 ...

  2. (ubuntu ufw)My firewall is blocking network connections from the docker container to outside

    Maybe this is due to the current version, but the current answer doesn't work on my system (Docker 0 ...

  3. 利用burpsuite实现重放攻击

    1.什么是重放攻击? 顾名思义,重复的会话请求就是重放攻击.可能是因为用户重复发起请求,也可能是因为请求被攻击者获取,然后重新发给服务器. 附上详细的解释:http://blog.csdn.net/k ...

  4. IntelliJ IDEA 、PyCharm、WebStorm、PhpStorm等JetBrains公司软件 激活的License Server本地搭建教程

    一.背景 IntelliJ IDEA是JetBrains公司的一款IDE,主要用于java开发,可以编写Java.Groovy.Kotlin.Scala等语言,也可以直接做Android开发. 同系列 ...

  5. 前端 html span标签

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 最长括号化长度 java

    1:求最长括号, ()(()()( 例如,它的最长符合括号化的长度为4 package com.li.huawei; import java.util.Arrays; import java.util ...

  7. 2.6 The Object Model -- Bindings

    一个binding在两个属性之间创建一个链接,当一个改变时,另外一个被自动更新为一个新的值. bindings可以在同一个对象中连接两个属性,或者用在两个不同的对象中. 不像大多数框架一样包含某种形式 ...

  8. CTR预估中的贝叶斯平滑方法(一)原理及实验介绍

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...

  9. navicat中文破解版,navicat破解版,navicat for mysql10.0.11简体中文破解版

    https://blog.csdn.net/weixin_40426638/article/details/78933585 下载链接如下(里面有破解码) https://pan.baidu.com/ ...

  10. php面向对象基础知识点总结

    下面是一些PHP面向对象基础知识的摘录,摘录内容来自PHP5.1手册. 1.类的变量成员叫做“属性”,或者叫“字段”.“特征”,在本文档统一称为“属性”. 2.属性中的变量可以初始化,但是初始化的值必 ...