c - 从 ARP 条目获取给定 IP 的 MAC 地址(Linux 内核)

标签 c linux linux-device-driver

我正在编写一个内核模块,对于给定的 IP,需要验证该 IP 的内核 ARP 缓存中是否存在 ARP 条目。如果存在,我需要从该 ARP 条目中获取 MAC 地址。

我现在正在尝试理解 usr/src/linux-version/net/ipv4/arp.c 上的 arp_find 函数,但我不太明白明白了...有人可以发布一个示例,说明我如何完成此任务或指导我做一些可以帮助我的事情吗?我将不胜感激!

编辑:我的 IP 地址存储为 struct in_addr

编辑#2:我找到了答案 - 对于那些遇到此问题的人,请检查 net/core/neighbour.c< 上的函数 neigh_lookup/pkey 参数只是指向您的 IPv4 地址 (struct in_addr) 的指针。

最佳答案

我认为在Linux内核中,ARP缓存只存储邻居的MAC地址。您可以使用 arp_ioctl() 或遵循 arp_ioctl() 方法来实现您的任务。 arp_ioctl()主要做两件事:(1)查找net_device; (2)arp查找;

关于c - 从 ARP 条目获取给定 IP 的 MAC 地址(Linux 内核),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208792/

相关文章:

c++ - 为什么 int 的大小在某些编译器中会有所不同?

C: 当 Haystack 中找不到 Needle 时,my_strstr 返回 Needle

c - 有时 float 比 double 好吗?

linux - 打印 Linux 上所有进程累积的内存和 CPU 百分比

c - banana pi 和设备树的 Linux 设备驱动程序

linux-kernel - 驱动mmap操作页表创建

c - 使用 sigusr1 和 sigusr2 进行进程同步

linux - sed - 没有那个文件或目录

linux - grep linux 中的模式(重复/出现超过 n)

c - kmalloc 许多结构,我应该一次全部分配还是分别分配