c - 如何在 pcap_loop 的回调函数中注入(inject)数据包?

标签 c sockets libpcap

我对套接字编程完全陌生。我正在尝试嗅探和欺骗数据包。我在 Linuxlibpcap 库中使用 pcap_loop 并使用以下签名:

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);

我想使用 pcap_injectpcap_sendpacketpcap_loop 内部的回调函数中注入(inject)数据包。

但是,pcap_injectpcap_sendpacket 需要 pcap_t * 句柄来发送原始数据包

回调函数似乎没有一种简单的方法来访问句柄。我想知道是否可以从回调中访问它,或者是否有更简单的方法来执行此操作。

最佳答案

这就是回调的 user 参数的用途。我不确定为什么它是 u_char * 而不是 void *,因为它是一个“通用指针”,并且 BPF 可以追溯到 1992 年,其中我认为大多数 C 编译器都支持 void * - 也许并非全部都支持。

在任何情况下,指向任意值的指针都可以通过将其作为参数传递给 pcap_loop()pcap_dispatch() 来传递给回调函数;它可能是一个指向结构的指针,其中包含您要捕获的 pcap_t * 等值。

这样,回调就可以使用 pcap_t * 调用 pcap_inject()

关于c - 如何在 pcap_loop 的回调函数中注入(inject)数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59252930/

相关文章:

在 C 中创建具有邻接矩阵的图

java - JNA 传递的值未更新

c - Bresenham 的圆算法

c# - ~1 秒 TcpListener Pending()/AcceptTcpClient() 滞后

linux - 错误 pcap 库未找到

c - 如何在 if 语句中初始化一个变量并在 if 语句之外使用它

C++ : how to close a tcp socket (server) when receiving SIGKILL

libpcap 无法捕获 IP 片段

packet-capture - libpcap 是否获得数据包的副本?

windows - 套接字泄漏在netstat和tcpview中未显示的Windows中