Python黑客编程 学习日记1 - Python实现ARP请求

进程与线程

把CPU看成是个工厂,那么进程就是工厂里面的N个车间,线程就是车间里面的N个工人。
区别:
1、同一个进程内的线程共享该进程的地址空间,而进程有自己独立的地址空间。
2、进程是资源分配和拥有的基本单位,同一个进程内的线程共享该进程资源。
3、线程是CPU调度的基本单位,进程不是。
4、二者均可并发执行。
优劣:
多线程程序并发性高,但当一个线程使用进程内的一个小内存空间时,该小内存空间被锁死,不能被其他线程访问;多进程程序因为进程拥有独立内存单元而互不干扰,但并发性稍低。

ARP

简介:
由于仅知道目的主机32bit的IP地址并不能发送数据,必须知道目的主机48bit的硬件地址(MAC)才能发送数据,而ARP可以完成IP地址到MAC地址的映射
工作原理:
主机A欲向局域网上的主机B发送数据。A发送的ARP请求包中包括IP_A(源IP),IP_B(目的IP),MAC_A(源MAC),FF-FF-FF-FF(目的MAC,广播)。B收到以后向A发出ARP响应包,包括IP_B(源IP),IP_A(目的IP),MAC_B(源MAC),MAC_A(目的MAC)。其中MAC_B便是主机A欲知道的信息,A收到以后写入ARP高速缓存,之后便可向B发送数据。
ARP高速缓存:
ARP高速缓存是ARP高效运行的关键,其存放了最近IP地址与MAC地址的映射,每一项映射的生存时间约为20min。

Python实现ARP

代码参考

https://github.com/collinsctk/PyQYT/blob/master/Network/ARP/ARP_Request.py
在这里插入图片描述

代码分析

1、print(result_raw),打印结果如下。可见返回给result_raw变量的是个元组,并且分为2列,一列是有应答的包,一列是无应答的包,我们应选择有应答的包,即result_raw[0]。
在这里插入图片描述

2、由于我们并不知道result_raw[0]的数据类型,所以type一下查看其类型,打印输出显示其为scapy类,谷歌搜索之后发现scapy类有个res方法。
在这里插入图片描述

3、打印esult_raw[0].res,如图。发现其为list里面套的一个元组,result_raw[0].res[0]即为该元组。
在这里插入图片描述

4、打印result_raw[0].res[0],如图。发现该元组有两个包,一个是发送的ARP包,一个是目的端响应的ARP包,我们应选择响应的包,即result_raw[0].res[0][1]
在这里插入图片描述

5、打印result_raw[0].res[0][1],如图。发现其为二进制,使用getlayer(ARP).fields将其变为人能看的。
在这里插入图片描述

6、打印result_raw[0].res[0][1].getlayer(ARP).fields,如图。由于ARP请求是要去得到目的端的MAC地址,所以我们需要的就是目的端发出的ARP应答包中的hwsrc参数,即result_raw[0].res[0][1].getlayer(ARP).fields[‘hwsrc’]。在这里插入图片描述

7、打印result_raw[0].res[0][1].getlayer(ARP).fields[‘hwsrc’],即为目的端的MAC地址,如图。
在这里插入图片描述

8、验证目的端windows主机的MAC地址是否一致,如图所示。
在这里插入图片描述

数据结构分析

在这里插入图片描述

实验过程中遇到的问题
问题1 如何提高.py文件执行权限?
答:chmod +x filename

问题2 ARP实验需要kali虚拟机与win10物理机在同一网段,如何配置?
答:设置kali虚拟机的网络连接为桥接模式(eth0),为其配置静态IP,具体操作参考 kali虚拟机如何配置静态IP

问题3 python脚本执行报错 zsh: ./ARP_Request.py: bad interpreter: /usr/bin/python3.4: no such file or directory如何解决?
答:将#!/usr/bin/python3.4改为#!/usr/bin/python3。

问题4 如何查看windows主机的MAC地址?
答:ipconfig/all

Scapy

下载:pip3 install scapy-python3
1、构造以太网包
构造一个以太网包a并显示,这时参数是默认的。
在这里插入图片描述
给该包指定数据后显示,如图。
在这里插入图片描述
2、构造ping包
构造一个ping包,将收到的返回包赋值给名为ping的变量,并显示。发现并没有收到echo-reply,起初以为是网络原因,换了手机热点结果还是不行,最后发现是TTL的原因。
TTL翻译为生存时间,但实际上TTL是计算机网络中IP数据包可以转发的最大跳数。在从源到目的地的整个IP数据包转发路径上,路由器在转发IP数据包之前会将每个路由器的TTL值减少1。
在这里插入图片描述
修改TTL值为64之后,问题得以解决,得到了echo-reply。可以看到源IP为192.168.37.191,即得到了该主机的reply,并且看到Raw里面有携带的数据。
在这里插入图片描述
3、收发数据包介绍
在这里插入图片描述
注意:二层都带p;sr和srp收到的数据类型是元组,因为收到的包可能不止一个;发送二层包必须指定走哪一个接口。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值