linux网卡不响应arp,Linux发送arp请求与接收arp响应

Linux 中获得本机网卡MAC地址很简单,ioctl()就OK。可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET自己实现,改啊改,终于成功~以下是大体思路

1. 为数据报分配空间,创建相应的结构体 req,arp 数据报的帧格式如图

2. 创建 PF_PACKET 原始套接字,发送套接字为 reqfd,接收套接字为 recvfd

3. 填写链路层通用结构体 reqsa

3. get_ifi()获取本机网络接口数据,填写要发送的ARP数据报 req 结构体,sendto()发送

4. 循环recvfrom()接收ARP响应,滤掉经由本地接口的其他ARP数据报

发送ARP请求能做的事不仅仅获取MAC地址吧…其他“有意义”的事也可以尝试一下下……下面是代码

C code

/**

* @send_arp.c

* @This software is intended to be used as a example to show how to send and receive arp request with Linux * PF_PACKET interface

* @Author:jiayi,http://www.jiayii.com

**/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include /* 需要里面的 glibc 版本号 */

#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1

#include

#include /* 链路层(L2)协议 */

#else

#include

#include

#include /* 链路层协议 */

#endif

#include

#define INLEN 4

#define MAC_BCAST_ADDR  (uint8_t *) "\xff\xff\xff\xff\xff\xff"

void usage_quit(char *arg0);

int get_ifi(char *

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值