1 Star 0 Fork 0

Shaco/rk3568_auto_test

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
example.c 2.28 KB
一键复制 编辑 原始数据 按行查看 历史
Shaco 提交于 2024-10-29 15:08 . 客户驱动测试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pfring.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
// #include <unistd.h>
void packet_handler(const struct pfring_pkthdr *header, const u_char *packet) {
struct ip *ip_header = (struct ip *)(packet + 14); // 以太网帧
printf("捕获到数据包: 长度 %u 字节\n", header->len);
// 检查是否为 IPv4 数据包
if (ip_header->ip_v == 4) {
// 测试:只处理 TCP 包
if (ip_header->ip_p == IPPROTO_TCP) {
char src_ip[INET_ADDRSTRLEN];
char dst_ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(ip_header->ip_src), src_ip, INET_ADDRSTRLEN);
inet_ntop(AF_INET, &(ip_header->ip_dst), dst_ip, INET_ADDRSTRLEN);
printf("源 IP 地址: %s\n", src_ip);
printf("目标 IP 地址: %s\n", dst_ip);
struct tcphdr *tcp_header = (struct tcphdr *)(packet + 14 + (ip_header->ip_hl * 4));
printf("协议: TCP\n");
printf("源端口: %u\n", ntohs(tcp_header->source));
printf("目标端口: %u\n", ntohs(tcp_header->dest));
printf("----------\n");
}
} else {
printf("不是 IPv4 数据包\n");
}
}
// 简单测试pf_ring抓包
int main(int argc, char *argv[]) {
if (argc != 3 || strcmp(argv[1], "-i") != 0) {
fprintf(stderr, "用法: %s -i <网口名称>\n", argv[0]);
return -1;
}
char *device = argv[2]; // 获取网口名称
int snaplen = 1500;
int promiscuous = 1;
int rc;
pfring *ring = pfring_open(device, snaplen, promiscuous);
if (ring == NULL) {
fprintf(stderr, "打开设备 %s 时出错\n", device);
return -1;
}
pfring_set_application_name(ring, "SimplePF_RINGPacketSniffer");
pfring_set_direction(ring, rx_and_tx_direction); // 设置抓取接收和发送的数据包
rc = pfring_enable_ring(ring);
if (rc != 0) {
fprintf(stderr, "启用 ring 时出错\n");
pfring_close(ring);
return -1;
}
struct pfring_pkthdr header;
u_char *packet;
while (1) {
if (pfring_recv(ring, &packet, 0, &header, 1) > 0) {
packet_handler(&header, packet);
}
}
pfring_close(ring);
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jun626/rk3568_auto_test.git
[email protected]:jun626/rk3568_auto_test.git
jun626
rk3568_auto_test
rk3568_auto_test
master

搜索帮助