libpcap 抓iPhone包 查找关键字

######tcpdump ,wireshark 都是基于libpcap的 ,需求是需要检查别人app是否调用了我们的接口 iOS 5之后 苹果引入了RVI(remote virtual interface)机制 ,手机通过USB线连接mac , 然后使用rvictl 并加上UDID就可以再Mac上创建虚拟网络接口rvi ,tcpdump ,wireshark都能用

rvistl -s <UDID>

复制代码

#####出现 SUCCEEDED 就算成功了


#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>


void packet_handler(u_char *user, const struct pcap_pkthdr *header, const u_char *packet)
{
    // xxxx 是我们要检索的关键字, 我们的接口信息 
   // 4是xxxx的长度 , 可以写成strlen("xxxx")
    if (memmem(packet,header->len ,"xxxx",4)) {
        printf("********************存在xxxx*******************\n");
    }

}
int main(int argc ,char * argv[])
{
//    pcap_lookupdev()函数用于查找网络设备,返回可被pcap_open_live()函数调用的网络设备名指针。
//    pcap_open_live()函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。
//    pcap_lookupnet()函数获得指定网络设备的网络号和掩码。
//    pcap_compile()函数用于将用户制定的过滤策略编译到过滤程序中。
//    pcap_setfilter()函数用于设置过滤器。
//    pcap_loop()函数pcap_dispatch()函数用于捕获数据包,捕获后还可以进行处理,此外pcap_next()和pcap_next_ex()两个函数也可以用来捕获数据包。
//    pcap_close()函数用于关闭网络设备,释放资源。

    pcap_t *handle;                 // 会话句柄
    
    char errbuf[PCAP_ERRBUF_SIZE]; // 存储错误信息的字符串
    
    bpf_u_int32 mask;               //所在网络的掩码
    bpf_u_int32 net;                // 主机的IP地址
    
    struct bpf_program filter;      //已经编译好的过滤器
    char filter_app[] = "";  //BPF过滤规则,和tcpdump使用的是同一种过滤规则
//    10.241.20.151
    /* 探查设备及属性 */
    char *dev;                      //指定需要被抓包的设备 我们在linux下的两个设备eth0和lo分别是网卡和本地环回
    dev = pcap_lookupdev(errbuf);   //返回第一个合法的设备,我这里是eth0
    pcap_lookupnet(dev, &net, &mask, errbuf);
    //dev = "lo";                   //如果需要抓取本地的数据包,比如过滤表达式为host localhost的时候可以直接指定
    
    /* 以混杂模式打开会话 */
    handle = pcap_open_live("rvi0", BUFSIZ, 1, 0, errbuf);
    
    /* 编译并应用过滤器 */
    pcap_compile(handle, &filter, filter_app, 0, net);
    pcap_setfilter(handle, &filter);
    
    /* 定义输出文件 */
    pcap_dumper_t* out_pcap;
//    out_pcap  = pcap_dump_open(handle,"/Users/DH/Desktop/CheckList/pack.pcap");
    
    /* 截获30个包 */
    while(!pcap_loop(handle, 5, packet_handler, NULL))
    {
                printf("-------\n");  //每8行才会输出一次这个
    }
    
     // 下面这个是把结果输出到本地保存成pcap文件的 ,最后一个参数如果写成NULL, 就不输出了
   // while(!pcap_loop(handle, 5, packet_handler, (u_char *)out_pcap))
  //  {
           //     printf("-------\n");  //每8行才会输出一次这个
 //   }
    /* 刷新缓冲区 */
    pcap_dump_flush(out_pcap);
    
    /* 关闭资源 */
    pcap_close(handle);
    pcap_dump_close(out_pcap);
    
    
    return 0;
    
}

复制代码
dev = pcap_lookupdev(errbuf); 这个没用到 , 返回的是mac当前默认的网卡 en0
这里需要用虚拟出的riv0,所以手动添加了

复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值