gpt4 book ai didi

linux - 在 Linux 中读取数据链路 (MAC) 层数据包

转载 作者:太空狗 更新时间:2023-10-29 12:16:30 30 4
gpt4 key购买 nike

在 Linux 上从数据链路 (MAC) 层读取数据包的最简单/最短/最容易的方法是什么?

有人可以给我们一个代码片段来告诉我们如何做到这一点吗?

我们为什么需要它?我们正在开发一种网络摄像机,其中千兆位芯片仅实现数据链路层。由于我们没有实现 IP 堆栈的资源,我们需要仅使用 MAC 地址交换数据包。

最佳答案

这是我正在寻找的代码片段:

#include <stdio.h>
#include <stdlib.h>

#include <sys/socket.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#include <linux/if_arp.h>


int main()
{
int s = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
if (s == -1)
{
printf("Error while creating socket. Aborting...\n");
return 1;
}

void* buffer = (void*)malloc(ETH_FRAME_LEN);
while(1)
{
int receivedBytes = recvfrom(s, buffer, ETH_FRAME_LEN, 0, NULL, NULL);
printf("%d bytes received\n", receivedBytes);
int i;
for (i = 0; i < receivedBytes; i++)
{
printf("%X ", ((unsigned char*)buffer)[i]);
}
printf("\n");
}
return 0;
}

关于linux - 在 Linux 中读取数据链路 (MAC) 层数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885350/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com