缓存从 pcap 捕获的数据包

2024-03-11

这是对此的后续问题:重建数据包以通过 pcap 注入 https://stackoverflow.com/questions/8193281/rebuilding-a-packet-to-inject-via-pcap

我想要实现的目标:

  1. functionA:使用pcap抓包。修改源/目标地址。重新计算校验和。用 pcap 注射。

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

我需要什么帮助:

  1. functionA:除了计算校验和之外,我可以做所有事情。我尝试通过使用函数自己计算原始校验和来验证原始校验和,但它们从不匹配。然而,这个问题并不那么重要,因为我不需要它来演示我的最终项目。据我了解,如果 IP 校验和不正确,接收计算机将丢弃该数据包。但是当我演示的时候,只要能证明我的客户端电脑收到了这个不正确的数据包,我就证明了我的整体概念,不会失败。 :)

  2. 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).

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

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

user 与 pcap_loop 的第四个参数中的字符串相同。

所以我在想,我可以通过类型转换偷偷地给我的回调函数提供指向字符串数组的指针。

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); <--- 497


    int i = 0;

    for(i = 0; i < header->len; i++)
    {
        (*cachethis)[cacheindex][i] = packet[i]; <-------------------503
    }

    //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

这是相当冗长的,希望我对我正在做的事情的了解没有完全被误导。任何帮助都是极好的! :)


u_char ** cachethis;

cachethis是一个指向 u_char 的指针。

So:

*cachethis

是一个指向 u_char 的指针,并且:

(*cachethis)[i]

是一个平原u_char.

所以第 497 行尝试将指针存储到u_char,第 503 行尝试为 a 添加下标u_char,两者均无效。

看起来你想要的很简单:

cachethis[i]

and

cachethis[i][j]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存从 pcap 捕获的数据包 的相关文章

随机推荐

  • 如何获取 Base64 编码字符串形式的 PIL 图像

    在过去的几个小时里 我一直在尝试创建图像的 Base64 字符串 但它不起作用 ship color 0 100 100 255 img Image new RGBA 100 100 for i in range 20 for j in r
  • 我可以有一个指向可分配数组组件中的项目的指针吗?

    我有一个用户定义的类型vector 在另一种类型中 我有一个可分配的向量数组 我想要一个指向这个可分配数组中的单个向量的指针 所以我想我会这样做 type another type type vector allocatable targe
  • 我可以使用一个登录页面通过 Spring 3.0 Security 重定向不同的页面吗? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 spring security 根据用户角色设置自定义登录后目标 https stackoverflow com questions 2818055 setting custom post lo
  • 在同一事务中插入和删除?

    我有一个包含一些数据的 Temp Table 根据 Temp Table 中的数据 我将从其他表中删除相关行 然后将 Temp table 中的所有数据插入到 table1 中 就像下面的例子一样 我可以以什么方式在 Server2 Tab
  • 如何使用 SSH 在另一台服务器上运行 PHP 中的 CLI 命令?

    我正在尝试在 PHP 中运行 CLI 命令 但在不同的服务器上 为了在另一台服务器上运行命令 我使用的是linuxssh命令 为了在 PHP 中运行 CLI 命令 我使用exec 这有效 output exec cut d f1 etc p
  • 虽然places.getLatLng()返回null,但places.getName()不返回null

    我一直在尝试从自动完成中单击一个位置后获取经纬度 奇怪的是places getName 工作正常但是place getLatLng 返回空值 我应该怎么做才能解决这个问题我是谷歌地图和地点 API 的新手 protected void on
  • 使用 launch4j 和 maven 包装 java 命令行应用程序

    我想使用 maven 和 launch4j 将基于 java 的命令行应用程序及其所有依赖项包装到单个 exe 文件中 现在我已经阅读了所有类似的问题 比如this one https stackoverflow com questions
  • 更改 Typescript 映射类型中的属性名称

    我有一个 Typescript 对象的集合 如下所示 SomeData prop1 string prop2 number 我需要最终得到一些如下所示的对象 type SomeMoreData prop1Change string prop
  • C# 字符串大于或等于代码字符串

    我试图让我的代码能够比较字符串是否大于或小于 10 但它无法正常工作 即使该值小于 10 它也会写入 10 或更多 int result string1 CompareTo 10 if result lt 0 Console WriteLi
  • 设置 UILocalNotification 的超时时间(一段时间后将其从锁屏和通知中心删除)

    我想设置一个UILocalNotification五分钟后 它将从锁定屏幕和通知中心消失 如果用户不点击它 我可以设置通知超时吗 或者也许会触发另一个通知来删除它 我相信 Facebook 是通过发送无声推送通知 http www g8pr
  • 正则表达式和冒号 (:)

    我有以下代码 这个想法是检测整个单词 bool contains Regex IsMatch Hello1 Hello2 bHello b yields false bool contains Regex IsMatch Hello Hel
  • 如何对 ObservableCollection 进行排序? [复制]

    这个问题在这里已经有答案了 我试过了 Persons from i in Persons orderby i Age select i 但我无法转换 LinqsSystem Linq IOrderedEnumerable to Observ
  • 减少玻璃鱼原木的线宽

    有谁知道如何减少玻璃鱼原木上每条线的宽度 它似乎包含很多我不需要的信息 下面是一行的示例 2012 03 04T16 00 09 537 0000 INFO oracle glassfish3 1 javax enterprise syst
  • Google 跟踪代码管理器不跟踪图像和图标上的链接点击

    在 Google 跟踪代码管理器中 我将其设置为跟踪包含特定类的元素的点击数据 并在 Google Analytics 中记录事件 它似乎适用于文本链接 但如果链接内有另一个用于图像 图标等的标签 我就会遇到问题 例如 以下内容可以正常工作
  • 前端计算价格不安全?

    我想知道是否可以操纵在前端完成的价格计算 我读了很多关于 JavaScript 价格计算器的文章 其中的业务逻辑仅在客户端 但对安全性却一无所知 考虑以下场景 React 应用程序有一个组件 表单 它根据其子组件 表单输入 的状态 用户交互
  • 请求映射中的双星号

    请求映射中出现双星号意味着什么 例如 RequestMapping value welcome method RequestMethod GET public ModelAndView welcomePage 一般来说 星号 通配符角色 意
  • DIO 响应解码问题

    我在用Dio为了使HTTP request var dio Dio var response await dio get URL final responseBody json decode response data final stat
  • 如何使用 Android 中的加速度计值计算特定轴的旋转速率

    我正在开发一个简单的游戏 其中角色仅沿 Y 轴上下移动 目前我正在使用加速度计读数来更改角色的 Y 速度 游戏运行良好 但最大的问题是你必须保持设备水平才能正常玩游戏 我真正想要的是仅当沿 Y 轴的旋转速率发生变化时才更改角色的 Y 速度
  • Azure SQL 频繁连接超时

    我们在 Azure 上运行一个 Web 应用程序 2 个实例 由 SQL Azure 数据库支持 在任何给定时间都有 50 150 个用户使用该网站 数据库以 S2 性能级别运行 DTU 平均约为 20 然而 每天都有几次我的日志中突然出现
  • 缓存从 pcap 捕获的数据包

    这是对此的后续问题 重建数据包以通过 pcap 注入 https stackoverflow com questions 8193281 rebuilding a packet to inject via pcap 我想要实现的目标 fun