linux下libpcap支持从多网卡抓包,设置为any即可

在IOS或者mac上就无法通过次方法抓取所有网卡报文

1.通过设置libevent事件回调,每个网卡注册读事件, fd通过

  pd = pcap_open_live(device, snaplen, dopromisc, timeout, ebuf);

获得。

  1. #ifdef IOS
  2. static int add_event(pcap_t *p)
  3. {
  4. if(!p)
  5. return -;
  6. //event_init();
  7. if(!base)
  8. base = event_base_new();
  9.  
  10. struct event *ev = NULL;
  11.  
  12. int fd = pcap_fileno(p);
  13. printf("---------fd:%d \n", fd);
  14.  
  15. //event_set(&evListen, fd, EV_READ, user_pcap_run, p );
  16. ev = event_new(base,fd, EV_READ | EV_PERSIST, user_pcap_run,p);
  17.  
  18. struct timeval timeout;
  19. timeout.tv_sec = ;
  20. timeout.tv_usec = ;
  21. //event_base_set(base,&evListen);
  22. event_add(ev, NULL);
  23.  
  24. return ;
  25. }
  26.  
  27. #endif

2.开线程 调用事件循环

  1. void *mt_vqmon_thread(void *param)
  2. {
  3. #ifdef ANDROID
  4.  
  5. mmap_cap_run();
  6.  
  7. #elif defined IOS
  8.  
  9. event_base_dispatch(base);
  10. printf("exit monitor thread\n");
  11.  
  12. #else
  13.  
  14. pcap_t *p = (pcap_t *)param;
  15. user_pcap_loop(p);
  16.  
  17. #endif
  18.  
  19. return NULL;
  20. }

3.其他读取报文,处理和pcap之前类似

  1. #ifdef IOS
  2. void user_pcap_run(evutil_socket_t s, short t, void *arg)
  3. {
  4. if(!arg)
  5. return;
  6.  
  7. pcap_t *p = (pcap_t *)arg;
  8.  
  9. const uint8_t *packet;
  10. struct pcap_pkthdr *pcap_header;
  11. int32_t retval;
  12. static uint64_t recv_bytes = ;
  13. static unsigned long start_time = ;
  14. unsigned long end_time, diff_time;
  15. int link_type;
  16.  
  17. link_type = pcap_datalink(p);
  18.  
  19. while()
  20. {
  21. retval = pcap_next_ex(p, &pcap_header, &packet);
  22.  
  23. if(retval >= && packet)
  24. {
  25. //handle_dissector(link_type,packet,pcap_header->caplen,&pcap_header->ts);
  26. recv_bytes += pcap_header->caplen;
  27. }
  28. else if(retval == ) //time out
  29. {
  30. printf("call user_pcap_run failed : No packets arrived before the timeout expired,try again!!!\n");
  31. break;
  32. }
  33. else if(retval == - ) // error
  34. {
  35. printf("No more packets to read from the file !\n");
  36. return ;
  37. }
  38. else
  39. {
  40. printf("call pcap_next_ex failed : %s\n",pcap_geterr(p));
  41. return ;
  42. }
  43.  
  44. static uint32_t last_drop_num = ;
  45. struct pcap_stat stat;
  46. pcap_stats(p,&stat);
  47.  
  48. if(stat.ps_drop && stat.ps_drop != last_drop_num)
  49. {
  50. printf("========>total packet = %u drop packet = %u \n",stat.ps_recv,stat.ps_drop);
  51. last_drop_num = stat.ps_drop;
  52. }
  53. // Print debug info.
  54. end_time = time();
  55.  
  56. if(start_time == )
  57. {
  58. start_time = end_time;
  59. }
  60. diff_time = end_time - start_time;
  61.  
  62. if(diff_time >= )
  63. {
  64. float mbps;
  65.  
  66. mbps = recv_bytes * 1.0 / ( * * diff_time);
  67. start_time = end_time;
  68. recv_bytes = ;
  69.  
  70. printf("==================================================> captured speed = %.2f Mbps !!!\n",mbps);
  71. }
  72.  
  73. /*
  74. * Check for savagely closed TCP connections.
  75. */
  76. tcp_check_timeouts(&pcap_header->ts);
  77. }
  78. return ;
  79. }
  80.  
  81. #endif

IOS多网卡抓包的更多相关文章

  1. 如何在ios 系统 中抓包??

    为了实现在ios系统上抓包,如下步骤: 1,设备越狱 2,在cydia-软件源-设置中改为开发者,否则有些deb搜索不到 安装如下软件:OpenSSH,OpenSSL,wget (下载工具) Apti ...

  2. ios透明代理抓包

    之前接到一些ios测试的时候,一些应用往往由于这样那样的原因(比如自实现的发包函数)导致直接使用本地ios系统的代理很难将数据代理到主机的burp或findler中,本文提供了一种解决该问题的途径 原 ...

  3. iOS,Android网络抓包教程之tcpdump

    现在的移动端应用几乎都会通过网络请求来和服务器交互,通过抓包来诊断和网络相关的bug是程序员的重要技能之一.抓包的手段有很多:针对http和https可以使用Charles设置代理来做,对于更广泛的协 ...

  4. iOS 利用Charles抓包

    1.安装 Mac下好用的HTTP/HTTPS抓包工具Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Retinizer中把文字变清 ...

  5. iOS系统网络抓包方法

    转到自己的博客收藏. 1. 网络共享 + 可视化抓包工具 基本原理 原理比较简单,ios设备通过代理方式共享连接mac电脑的无线网卡,使用抓包工具抓包,然后进行分析(我们推荐使用Wireshark,在 ...

  6. 使用Fiddler对Android或者iOS设备进行抓包

    1.PC端Fiddler配置 Tools->HTTPS->选中“Decrpt HTTPS traffic”,“Ignore server certificate errors” Tools ...

  7. UNIX网络编程——尝试探索基于Linux C的网卡抓包过程

     抓包首先便要知道经过网卡的数据其实都是通过底层的链路层(MAC),在Linux系统中我们获取网卡的数据流量其实是直接从链路层收发数据帧.至于如何进行TCP/UDP连接本文就不再赘述(之前的一段关于w ...

  8. Centos7 多网卡抓包可以抓到UDP但程序recvfrom不到

    问题: Centos7多网卡,抓包时发现某网卡上有UDP包,但是用程序recvfrom无法接收到消息. 解决步骤: 1.确认防火墙是否关闭: 已关闭 2.确认网卡是否开启过滤:cat /proc/sy ...

  9. IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效

    先上一张捉取成功图[版本需4.0以上,并非所有https数据可抓取,具体原因未知] 1.先对Fiddler进行设置[打开Fiddler ——> Options .然后打开的对话框中,选择HTTP ...

随机推荐

  1. Spring Cloud入门程序

    本文手把手教你,做出第一个Spring Cloud程序,Eureka的简单入门使用 1.创建Spring Starter Project工程 点击next,添加项目名 2.引入Spring Cloud ...

  2. 使用C语言来实现模块化

    除了C语言以及C++编程语言之外,在其它现在非常流行的开发语言中,比如说:java,php,jsp等等.我们很难想象到缺少标准化的模块管理机制是一件多么可怕的事情.但是这往往也是由C语言本身的设计哲学 ...

  3. ARM实验3 ——串口实验

    uart串口实验 实验内容: 编写UART模块程序,通过串口将信息打印到终端. 实验目的: 熟悉开发环境的使用. 掌握exynos4412处理器的UART功能. 实验平台: FS4412开发板,ecl ...

  4. 译:Local Spectral Graph Convolution for Point Set Feature Learning-用于点集特征学习的局部谱图卷积

    标题:Local Spectral Graph Convolution for Point Set Feature Learning 作者:Chu Wang, Babak Samari, Kaleem ...

  5. AD的命名规则 AD常用产品型号命名规则

    AD的命名规则 AD常用产品型号命名规则 DSP信号处理器    放大器工业用器件通信    电源管理    移动通信 视频/图像处理器等 模拟A/D    D/A 转换器 传感器    模拟器件 A ...

  6. firewalld 使用简介

    学习apache安装的时候需要打开80端口,由于centos 7版本以后默认使用firewalld后,网上关于iptables的设置方法已经不管用了,想着反正iptable也不会用,索性直接搬官方文档 ...

  7. 如何将Win7做为NTP服务器

    1. 修改注册表项    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer   ...

  8. 机器学习实战之Logistic回归

    Logistic回归一.概述 1. Logistic Regression 1.1 线性回归 1.2 Sigmoid函数 1.3 逻辑回归 1.4 LR 与线性回归的区别 2. LR的损失函数 3. ...

  9. halcon保存带有region的图片算子

    显示带区域的图片除了可以用dev_display挨个显示外再截图,还可以通过一个算子来实现这一功能 这个算子是:dump_window_image.(其实就是截图) 这个算子的意思是把WindowHa ...

  10. 【转】Mac 程序员的十种武器

    http://chijianqiang.baijia.baidu.com/article/3733 上 在写 Mac 程序员的十个武器之前,我决定先讲一个故事,关于 Mac 和爱情的.(你们不是问 M ...