ARP个人理解以及和python的结合

ARP个人理解以及和python的结合

本人目前还是名高中生,以下全是自学,如有错误请谅解,大佬勿喷
联系QQ:3037580090

一. ARP简介

  1. 当一台主机把数据发送到位于同一局域网的另一台主机时,是根据48bit的以太网地址(mac地址)来确定目的和接口的。设备驱动程序从不检查IP数据报中的目的IP地址。

  2. 地址解析为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址。

  3. ARP为IP地址到对应的硬件地址(windows中的mac地址)之间提供动态映射。动态映射的“动态”,也就是自动的
    注意:只有在多路访问链路才需要ARP技术

    自己的理解:在多路访问链路的网络中(如局域网)两台主机进行数据传送只知道IP是无法通信的,需要ARP协议将IP与对应的硬件地址进行动态映射才能进行数据交互

二. ARP高速缓存(命令: arp -a)
ARP高速运行的关键是由于每个主机上都有一个ARP高速缓存表。这个表上存放了最近internet地址到硬件地址之间的映射记录,高速缓存中的每一项的生存时间一般为20分钟

在这里插入图片描述

三. 安装scapy(网络工具,可导入的模块)
https://www.cnblogs.com/beyond2019/p/11067618.html(转载,如有侵权请联系)
详情请查百度

四. Scapy的基本使用

  1. scapy默认值举例
    在这里插入图片描述

  2. 实例:产生一个ping包
    在这里插入图片描述

  3. Scapy收发数据包的方式
    前提:带p的发二层数据包,需要有Ether(); 没有p的发三层数据包,不需要Ether()
    sr() 发送三层数据包,等待一个或多个数据包的响应
    srp() 发送两层数据包,等待一个或多个数据包的响应
    sr1() 发送三层数据包,并且等待且仅等待一个数据包的回应
    send() 发送二层数据包
    sendp() 发送三层数据包

五. Python结合scapy实现arp收发包
代码示例
在这里插入图片描述

代码刨析

了解: 在构造包的时候的verbose=False的作用是在输出的时候不显示错误

关键代码刨析print(pack[0].res[0].getlayer(ARP).fields[“hesrc”])

  1. 第一步输出print(pack)时是一个元组,第一个是有结果的包,第二个是没有回应的包
    在这里插入图片描述

  2. 第二步输出print(pack[0])显示第一个字段

  3. 第三步print(pack[0].res)将结果显示为列表,列表里套着元组(目的是为了区分多个收发包)。第一个列表里的元组的第一个值是请求包,第二个值是接收包
    在这里插入图片描述

  4. 第四步print(pack[0].res[0])显示第一个列表中的请求和接收包
    在这里插入图片描述

  5. 第五步print(pack[0].res[0][1])显示元组中的接受包,输出的内容使用的是二进制(因为要获取目标mac地址)
    在这里插入图片描述

  6. 第六步print(pack[0].res[0][1].getlayer(ARP).fields)获取ARP值并以字典的形式显示
    在这里插入图片描述

  7. 第七步print(pack[0].res[0][1].getlayer(ARP).fields[“hwdst”]) 在输出的字典中查找hwdst(源mac地址)所对应的值
    在这里插入图片描述

    成功获取到目标的mac地址

猜你喜欢

转载自blog.csdn.net/Wangsir1230/article/details/113762219
今日推荐