Skip to content

leeshung/snifferframework

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SnifferAndroid

简介

SnifferAndroid是安卓平台上的手机抓包sdk,底层基于libnids实现。有抓包需求的应用可以方便的接入该sdk。特别提醒:使用此sdk需要root权限。使用此SDK的抓包app例子可参考安卓抓包

功能

  • 支持HTTP
  • 支持DNS
  • 网络入侵检测
  • 支持pcap过滤表达式
  • 可方便扩展以支持其他协议

架构

应用接入方法

1.首先将编译出的pcapd可执行程序放入到应用程序某个路径下,比如libs/pcapd;

   2.定义自己需要传递给框架的参数:

Sniffer.Params mParam = new Sniffer.Params() {
  //返回你的pcap过滤表达式,不需要过滤直接返回空
  public String getPcapFilter() {
     return "";
  }
  //是否使能校验和检查,一般返回false即可
  public boolean enableChecksum() {
     return false;
  }
  //返回守护进程pcapd的存放路径
  public String daemonPath() {
    //
  }
}
3.监听sniffer-framework推送的底层事件:
Sniffer.get().registerEventListener(new Subscriber<EventData>() {
 @Override
 public void onNext(EventData eventData) {
   if (eventData.event == Event.ENV_PID_EVENT) {
     //记录下pcapd的pid
   } 
   ...
 }

由于pcapd可执行文件是一个独立进程,所以通常应用很有必要监听Event.ENV_PID_EVENT事件以便在合适的时候停止该进程,停止进程可以调用

Sniffer.stopSniffer(pid, true)

其中第一个参数是pcapd进程的pid,第二个参数决定是否异步。

4.在应用的任意地方(建议在Application中)调用如下初始化接口:
Sniffer.get().init(context, mParam);

该接口返回一个rxjava的Observable,完整代码参考如下。

Sniffer.get().init(SnifferApp.this, mParam)
       .observeOn(AndroidSchedulers.mainThread())
       .subscribe(new Action1<Integer>() {
           @Override
           public void call(Integer resultCode) {
              if (resultCode == 0) {
                //TODO 框架初始化成功
              } else {
                //TODO 框架初始化失败
              }
           }
        });

  5.最后注册监听需要处理的协议:

  Sniffer.get().registerHandler(mProto, new Subscriber<AbsData>() {
      @Override
      public void onNext(AbsData absData) {
        //absData就是抓包的数据包了
      }
    });

第一个参数是协议端口号,比如http为80,第二个参数是抓包后的回调。

注意:sniffer-framework目前只做了Http和DNS数据的解析还原。如果你想解析还原其他协议的数据,需要自行添加协议处理器:

  class MyProtoParser implements IDataParser {
      ....
  }

并调用Sniffer.addParser将自己的协议处理器加入到框架中。

依赖

 框架实现中使用到了RxJava和RxAndroid,需要接入的app需要引入对Rx的依赖

About

sniffer sdk for android

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 78.9%
  • Java 7.8%
  • C++ 4.0%
  • HTML 3.9%
  • Roff 2.4%
  • Yacc 0.9%
  • Other 2.1%