From e378061865fe752e33383e078a78262ea6a48291 Mon Sep 17 00:00:00 2001 From: zhji Date: Wed, 3 Jul 2024 15:35:36 +0800 Subject: [PATCH] [feat] add pcap inject demo --- linux/pcap/main_inject.c | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 linux/pcap/main_inject.c diff --git a/linux/pcap/main_inject.c b/linux/pcap/main_inject.c new file mode 100644 index 0000000..a1307da --- /dev/null +++ b/linux/pcap/main_inject.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +static const uint8_t test_frame[42] = { + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, // dst mac b0:7b:25:00:89:53 + 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, // src mac + 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x02, // arp reply + 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, // src mac + 10, 11, 12, 13, // src ip 192.168.123.100 + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, // dst mac b0:7b:25:00:89:53 + 14, 15, 16, 17 // dst ip 192.168.123.178 +}; + +int main() { + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *handle; + + // 打开网络设备 + handle = pcap_open_live("eno1", BUFSIZ, 0, 1000, errbuf); + if (handle == NULL) { + fprintf(stderr, "Couldn't open device: %s\n", errbuf); + return 1; + } + + // 构建数据包 + u_char packet[1024]; + int packet_len = 0; + memcpy(packet, test_frame, 42); + packet_len = 42; + + // 发送数据包 + int ret = pcap_inject(handle, packet, packet_len); + if (ret == -1) { + fprintf(stderr, "Couldn't send packet: %s\n", pcap_geterr(handle)); + pcap_close(handle); + return 1; + } else { + printf("Packet sent successfully (%d bytes)\n", ret); + } + + // 关闭网络设备 + pcap_close(handle); + + return 0; +} \ No newline at end of file