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

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

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

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

获得。

#ifdef IOS
static int add_event(pcap_t *p)
{
if(!p)
return -;
//event_init();
if(!base)
base = event_base_new(); struct event *ev = NULL; int fd = pcap_fileno(p);
printf("---------fd:%d \n", fd); //event_set(&evListen, fd, EV_READ, user_pcap_run, p );
ev = event_new(base,fd, EV_READ | EV_PERSIST, user_pcap_run,p); struct timeval timeout;
timeout.tv_sec = ;
timeout.tv_usec = ;
//event_base_set(base,&evListen);
event_add(ev, NULL); return ;
} #endif

2.开线程 调用事件循环

void *mt_vqmon_thread(void *param)
{
#ifdef ANDROID mmap_cap_run(); #elif defined IOS event_base_dispatch(base);
printf("exit monitor thread\n"); #else pcap_t *p = (pcap_t *)param;
user_pcap_loop(p); #endif return NULL;
}

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

#ifdef IOS
void user_pcap_run(evutil_socket_t s, short t, void *arg)
{
if(!arg)
return; pcap_t *p = (pcap_t *)arg; const uint8_t *packet;
struct pcap_pkthdr *pcap_header;
int32_t retval;
static uint64_t recv_bytes = ;
static unsigned long start_time = ;
unsigned long end_time, diff_time;
int link_type; link_type = pcap_datalink(p); while()
{
retval = pcap_next_ex(p, &pcap_header, &packet); if(retval >= && packet)
{
//handle_dissector(link_type,packet,pcap_header->caplen,&pcap_header->ts);
recv_bytes += pcap_header->caplen;
}
else if(retval == ) //time out
{
printf("call user_pcap_run failed : No packets arrived before the timeout expired,try again!!!\n");
break;
}
else if(retval == - ) // error
{
printf("No more packets to read from the file !\n");
return ;
}
else
{
printf("call pcap_next_ex failed : %s\n",pcap_geterr(p));
return ;
} static uint32_t last_drop_num = ;
struct pcap_stat stat;
pcap_stats(p,&stat); if(stat.ps_drop && stat.ps_drop != last_drop_num)
{
printf("========>total packet = %u drop packet = %u \n",stat.ps_recv,stat.ps_drop);
last_drop_num = stat.ps_drop;
}
// Print debug info.
end_time = time(); if(start_time == )
{
start_time = end_time;
}
diff_time = end_time - start_time; if(diff_time >= )
{
float mbps; mbps = recv_bytes * 1.0 / ( * * diff_time);
start_time = end_time;
recv_bytes = ; printf("==================================================> captured speed = %.2f Mbps !!!\n",mbps);
} /*
* Check for savagely closed TCP connections.
*/
tcp_check_timeouts(&pcap_header->ts);
}
return ;
} #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. 笨办法学Python(三十一)

    习题 31: 作出决定 这本书的上半部分你打印了一些东西,而且调用了函数,不过一切都是直线式进行的.你的脚本从最上面一行开始,一路运行到结束,但其中并没有决定程序流向的分支点.现在你已经学了 if,  ...

  2. 用户表单事件(focus事件)

    以前做用户系统的时候经常用到表单验证,正则表达式事件来处理和绑定事件和进行事件,这里说的其实只是一小部分,也不是很值得写,但是今天遇到了还是写一下,毕竟基础还是蛮重要的,就算懂的童鞋,巩固一下也是好的 ...

  3. MySQL入门很简单: 5 索引

    1. 索引的含义和特点 索引:创建在表上,是对数据库表中一列或多列的值进行排序的一种结构. 存储类型: B性树(BTREE)索引和哈希(HASH)索引: InnoDB和MyISAM支持BTREE索引, ...

  4. C4C Product Price List的模型中和有效期相关的两个字段

    SAP C4C的price list实例可以在工作中心Products,视图Price Lists里看到. 我们点开第二个名为TEST的实例: 我写这篇文章的日期是2018年10月27日, 我现在把这 ...

  5. IOS 单例模式(非ARC)

    singleton_h :连接字符串和参数 // ## : 连接字符串和参数 #define singleton_h(name) + (instancetype)shared##name; #defi ...

  6. P1909 买铅笔

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔 ...

  7. 使用ssl模块配置同时支持http和https并存

    博客已经迁移,请访问: https://www.helingfeng.com

  8. matlab 大块注释和取消注释的快捷键

    matlab 大块注释和取消注释的快捷键 注释:Ctrl+R 取消注释:Ctrl +T

  9. Pj Immediate Decodability

    判断一个串是否是其他的前缀 我们需要建立一颗tire树 在插入边的时候,如果遇到一个其他串的结尾,那么就说明至少有一个串,是插入串的前缀.如果在插入完后没有新增的节点,那么插入的串就是其他串的前缀 # ...

  10. macOS Sierra系统偏好设置->安全性和隐私->通用中的“任何来源” 选项开与关

    显示"任何来源"选项在控制台中执行: sudo spctl --master-disable 不显示"任何来源"选项(macOS 10.12默认为不显示)在控制 ...