linux环境实现ARP欺骗

本文详细介绍了如何在Linux环境中利用原始套接字实现ARP欺骗。通过监听和伪造ARP应答包,达到欺骗局域网内其他设备的目的。讲解了利用SOCK_RAW创建链路层原始套接字,以及使用recvfrom()和struct sockaddr_ll发送欺骗应答包的过程。通过三次测试验证了ARP欺骗的实现,并探讨了原始套接字与标准套接字的区别,以及涉及的struct ifreq和ioctl()函数在获取网卡信息中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现ARP欺骗的原理:

根据ARP协议的工作原理,我们知道ARP大多时候都会发起广播请求,而处于同一局域网内的所有主机都可以收到某主机发出的ARP广播请求,利用这个工作原理我们可以接收到网络上与自己无关的ARP请求包,然后回复一个带有假的MAC地址的reply包以达到ARP欺骗的目的。

二、具体思路:

 

三、实现过程:

       1、使用SOCK_RAW即原始套接字进行ARP数据包的抓取,然后使用recvfrom()函数获取数据包中的数据;并将请求包中的源MAC、源IP、目的IP等信息提取出来:

2、自定义一个以太网ARP协议数据帧结构体然后将相关数据填充进去,其中需要使用socket和struct ifreq结构体获取本地主机的IP。而数据填充时的源MAC则是自定义的假的MAC地址,所以不需要使用该结构体来获取本地的MAC了。在欺骗应答包中的目的MAC以及目的IP则是从广播ARP请求中提取出来的;

3、发送欺骗应答包。这里主要是使用原始套接字在二层网络进行相关的操作,所以需要用到的是struct sockaddr_ll结构体而不是我们常用的struct sockaddr_in结构体 (这里就有关于二层网络套接字操作与三层网络套接字的一些区别,在后面会进行详细讨论。)

第一次测试:程序运行并抓包分析过程如图1下:

图1

测试的时候,我在过滤条件中添加了对我自己的PC进行过滤,就是我用PC来ping虚拟机,虚拟机就能接收到PC发来的ARP广播请求,接着虚拟机自动会给PC回复一个正常的应答包,同时也会将我自定义的应答包发给PC,此时,在PC的以太网端口进行抓包就能看到一个广播的ARP包下面会有两个应答包,如下图2所示:

图2

       PCIP192.168.2.191,虚拟机的IP为:192.168.2.224

欺骗包中假的MAC地址为:66:66:66:66:66:66

这三个ARP数据包的具体内容分别如下:图3为PC的广播包,图4为虚拟机正常的应答包,图5为自定义的欺骗应答包;

图3

在ARP请求广播包中,源MAC为:74:4d:35:c1:8b:bb;

源IP:192.168.2.191

目的IP:192.168.2.224

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值