我正在使用Windows 10 64-bit
并使用MinGW-w64
进行编译,同时使用WinPcap
。
尝试发送/注入这样的数据包:
#include <stdio.h>
#include <pcap.h>
int main(int argc, char **argv)
{
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *cap = pcap_open(argv[1], 65535, 0, 1000, 0, errbuf);
printf("interface capture: %s\n", cap == 0 ? "failed" : "success");
unsigned char packet[100];
// Dst MAC
packet[0] = 0x74;
packet[1] = 0xc6;
packet[2] = 0x3b;
packet[3] = 0x00;
packet[0] = 0x06;
packet[5] = 0xb5;
// Src MAC
packet[6] = 0x74;
packet[7] = 0xc6;
packet[8] = 0x3b;
packet[9] = 0x00;
packet[10] = 0x06;
packet[11] = 0xb5;
// others
for (unsigned char i = 12; i < 100; i++)
{
packet[i] = i;
}
printf("inject packet: %s\n", pcap_sendpacket(cap, packet, 100) == 0 ? "success" : "failed");
return 0;
}
一切看起来都很好并且在发送/注入程序上取得了成功。
然而,我无法捕获任何数据包,使用Wireshark
检查,仍然没有运气。
我正在以CMD的管理员身份运行程序,也尝试发送原始UDP数据包。
我是否遗漏了某些内容,或者这是将数据包发送/注入网络接口的正确方法?
答案 0 :(得分:2)
我解决了我的问题!这是因为Windows上的EOF
。
请在此处阅读$ ./bin/array_map_values
initial string mappings:
A : 4
A# : 4
B : 1
Bb : 7
C : 1
C# : 11
D : 8
D# : 3
E : 4
F : 2
F# : 6
G : 8
G# : 10
enter key ('quit' to exit): A
key: 'A' - value: 4
enter key ('quit' to exit): A#
key: 'A#' - value: 4
enter key ('quit' to exit): D
key: 'D' - value: 8
enter key ('quit' to exit): D#
key: 'D#' - value: 3
enter key ('quit' to exit): G#
key: 'G#' - value: 10
enter key ('quit' to exit): g@
error: key not found.
enter key ('quit' to exit): B
key: 'B' - value: 1
enter key ('quit' to exit): quit
wiki页面:CaptureSetup/Loopback
已安装Npcap,其loopback
数据包捕获和注入支持。
对于我的情况,只需从Wireshark
网络接口(由loopback
驱动程序提供)捕获数据包,然后再将数据包注入此loopback
网络接口。现在我能够在Npcap
中捕获数据包,UDP接收器套接字成功读取我注入的数据包。