我想要完成的事情:

functionA:使用pcap捕获数据包 . 修改源/目标地址 . 重新计算校验和 . 注入pcap .

functionB:创建两个线程 . 线程1发送一个魔术包以唤醒睡眠客户端 . 线程2使用pcap捕获数据包并将数据包缓存到u_char *的数组中,因为pcap将数据包串行放入“u_char *数据包” . 当两个线程终止时,我然后更改标头然后注入每个缓存的数据包 .

我需要帮助的是:

functionA:我可以做任何事情,但计算校验和 . 我尝试通过函数计算它来验证原始校验和,但它们从不匹配 . 但是,这个问题并不重要,因为我不需要它来演示我的最终项目 . 我知道如果IP校验和不正确,接收计算机将丢弃该数据包 . 但是当我演示时,只要我的客户端计算机可以显示已收到这个错误的数据包,我已经证明了我的整体概念并且不会失败 . :)

functionB:我想这是更重要的问题 . 我不知道缓存捕获的数据包的简单方法 . 我现在正在做的工作如下:

functionB创建一个指向存储u_char *的数组的指针,该数组称为cachedPackets . 所以cachedPackets基本上指向一个存储“字符串”的数组 .

会是这样的吗? u_char ** cachedPackets[100] ,100个数据包足够的数组元素 .

在此之后,我开始两个线程 . Thread1唤醒我的睡眠客户端 . Thread2打开另一个pcap会话,因此在客户端唤醒时没有数据丢失 . Thread1很简单,我已经独立测试了我的发送魔术包功能 . Thread2是我搞砸的地方 .

Thread2最终调用 int pcap_loop(pcap_t *p, int cut, pcap_handler callback, u_char *user) .

callback是捕获每个数据包后将运行的函数 . 这是我将数据包缓存到数组中的地方 .

回调参数 ( u_char* user, const struct pcap_pkthdr* packet_header, const u_char* packet_data )

user是pcap_loop的第4个参数中的相同字符串 .

所以我在想,我可以偷偷地给我的回调函数指向一个字符串数组的指针 .

pcap_loop(asdf, asdf, callback, (u_char *)cachedPackets);

由于我不知道传入的数据包有多大,我将在回调函数中动态分配足够的空间 . 我还将使用静态int跟踪我在数组中的位置 .

这就是回调的样子:

void cacheCall(u_char * user, const struct pcap_pkthdr * header, const u_char * packet)

static int cacheindex = 0;

u_char ** cachethis = (u_char **)user;

//u_char * cachething = *cachethis;

(*cachethis)[cacheindex] = (u_char *) malloc(header->len);

int i = 0;

for(i = 0; i < header->len; i++)

{

(*cachethis)[cacheindex][i] = packet[i];

}

//memcpy(cachething[cacheindex], packet, header->len);

cacheindex++;

但是当我编译时,我得到了

497: warning: assignment makes integer from pointer without a cast

503: error: subscripted value is neither array nor pointer

这是非常漫长的,希望我对我正在做的事情的知识并没有被完全误导 . 任何帮助都是极好的! :)

java 捕获数据包,缓存从pcap捕获的数据包相关推荐

  1. 计算机网络课程设计——发送和接收TCP数据包以及发送和捕获ARP数据包

    1.课程设计要求: 发送和接收TCP数据包:TCP是一种面向连接的.可靠的传输层协议.TCP协议工作在网络层IP协议的基础上.本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个T ...

  2. Wireshark数据抓包教程之认识捕获分析数据包

    Wireshark数据抓包教程之认识捕获分析数据包 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了.Wiresh ...

  3. Wireshark数据抓包教程之Wireshark捕获数据

    Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址 ...

  4. Wireshark使用(捕获过滤器、显示过滤器、TCP交互抓包示例、抓取本地回环数据包等)

    1.捕获过滤器规则 1.1 作用   捕获过滤器在开始捕捉之前设置,用于从源头控制被过滤的包内容,仅符合规则的包会被捕获并记录进捕获日志文件. 1.2 语法规则 字段:[Protocol][Direc ...

  5. MISC:流量包取证(pcap文件修复、协议分析、数据提取)

    文章目录 1.流量包修复 2.协议分析 2.1 wireshark基本操作 2.2 一些例题(各种协议) 3.数据提取 1.流量包修复 这个方向的考点较少 当我们用 wireshark 打开流量包时, ...

  6. Packet Chasing:通过缓存侧信道监视网络数据包

    摘要 本文介绍了一种对网络的攻击–Packet Chasing,这种攻击不需要访问网络,无论接收数据包的进程的特权级别如何,都能发挥作用.一个间谍进程可以很容易地探测和发现网络驱动程序使用的每个缓冲区 ...

  7. java 生成.pcap_java抓包后对pcap文件解析示例

    这是自己写的简单的解析pcap文件,方便读取pcap文件,大家参考使用吧 复制代码 代码如下: InputStream is = DataParser.class.getClassLoader().g ...

  8. 抓包工具Wireshark使用教程:抓包、捕获/显示过滤器、表达式、追踪流

    Wireshark是一款非常流行的网络抓包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.wireshark是非常流行的网络封包分析软件,功能十分强大.使用wireshark的人 ...

  9. java udp包_基于UDP协议的数据包收发程序(代码+报告)Java

    [实例简介] 设计要求: 1)按照UDP协议数据包发送方式实现用户端之间的通信. 2)统计包的发送和接收数,计算数据包的丢失数. 3)设计美观易用的图形界面. [实例截图] [核心代码] 基于UDP协 ...

最新文章

  1. 4个月原生weex混合开发终结()
  2. matlab simulink 电气连接
  3. anaconda双版本完美并存
  4. 向日葵远程使用备忘录
  5. 使用Quick BI连接AnalyticDB for PostgreSQL数据源
  6. oracle怎么查询和插入表,Oracle查询一个表的数据插入到另一个表
  7. c++ namespace_c++语法2、c执行命名空间输入输出
  8. SQL Server 2008 R2 SSRS 安装配置后无法使用问题的解决方法
  9. Echarts.js+jquery.js+china.js实现中国疫情地图
  10. matlab外接矩形,matlab求二值圖像最小外接矩形
  11. 了解SQL Server CASE语句
  12. 计算机专业内卷严重,考研,这6个专业“内卷”严重,竞争较为激烈!
  13. 运筹学牛顿法c语言源代码,运筹学与MATlab编程.doc
  14. 关于python搜题的软件哪个好_搜题用哪个软件好?
  15. 使用 Notepad 或 TextEdit 来编写 HTML
  16. c语言的一颗会变色的圣诞树
  17. VC中画基准线,随鼠标移动
  18. 淘宝一月上钻是这样操作的
  19. 微信公众号开发踩坑指南(3)——公众号返回超链接点击跳转并自动关闭
  20. 软件产品检测测试报告找谁做?出测试报告机构推荐

热门文章

  1. Pacbio三代基因组组装简介
  2. ppt 简单动画制作
  3. python的代码编译、代码打包方法
  4. 时空特征--Learning Spatiotemporal Features with 3D Convolutional Networks
  5. Caffe 关于 LetNet-5 之 lenet_solver.prototxt 解析
  6. Linux 常用小技巧
  7. c语言里的多参数吗,C语言中不定参数的实现
  8. linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...
  9. 人形图案c语言程序_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  10. Java使用Lettuce操作redis