Python3利用scapy局域网实现自动多线程arp扫描功能


Posted in Python onJanuary 21, 2021

一、所需Python库

from scapy.all import *
import threading

二、实现ip扫描

1.获取c段ip地址

在ARP()里面有ip地址,我们可以从里面提取出前3段出来

ARP().show()

Python3利用scapy局域网实现自动多线程arp扫描功能

然后通过从后查找最后一个.得到最后一段位数,然后总长度-最后一段长度就能取出前3段

tip=ARP().psrc
print(tip[:(len(tip)-tip[::-1].find('.'))])

2.arp扫描函数实现

然后就是建立函数实现扫描了,构造arp包->发送包->判断是否响应->输出信息

def ScanIp(ip):
	pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
	res=srp1(pkt,timeout=10,verbose=0)
	if res:
		print(res.psrc)
		print(res.hwsrc)

然后来在加个判断返回的ip跟我们要扫描的ip是否一致,然后加上异常处理

def ScanIp(ip):
	pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
	try:
		res=srp1(pkt,timeout=10,verbose=0)
		if res.psrc==ip:
			print(res.psrc)
			print(res.hwsrc)
	except:
		pass

现在把输出结果美化一下,不然直接print很难看

def ScanIp(ip):
	pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
	try:
		res=srp1(pkt,timeout=10,verbose=0)
		if res.psrc==ip:
			print('IP     MAC')
			print('[+]'+res.psrc+' '+res.hwsrc)
	except:
		pass

尝试调用一下

ScanIp('192.168.123.1')

现在看起来就很舒服

Python3利用scapy局域网实现自动多线程arp扫描功能

3.多线程

现在我们只需要循环一下c段ip然后用多线程跑起来就行了

for i in range(1,256):
	ip=tip+str(i)
	Go=threading.Thread(target=ScanIp,args=(ip,))
	Go.start()

然后看一下效果好像不是我们想要的因为IP MAC输出了很多次看起来很难受

Python3利用scapy局域网实现自动多线程arp扫描功能

然后这里把输出移动到函数外的for循环上方,然后判断一下__name__,这样就完成了所有的功能了

from scapy.all import *
import threading
 
tip=ARP().psrc
tip=tip[:(len(tip)-tip[::-1].find('.'))]
 
def ScanIp(ip):
	pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
	try:
		res=srp1(pkt,timeout=10,verbose=0)
		if res.psrc==ip:
			print('[+]'+res.psrc+' '+res.hwsrc)
	except:
		pass
 
if __name__=='__main__':
	print('IP     MAC')
	for i in range(1,256):
		ip=tip+str(i)
		Go=threading.Thread(target=ScanIp,args=(ip,))
		Go.start()

运行效果

Python3利用scapy局域网实现自动多线程arp扫描功能

到此这篇关于Python3利用scapy局域网实现自动多线程arp扫描功能的文章就介绍到这了,更多相关Python scapy实现arp扫描内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
实例讲解Python爬取网页数据
Jul 08 Python
tensorflow实现加载mnist数据集
Sep 08 Python
python中单例常用的几种实现方法总结
Oct 13 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
Python中关于浮点数的冷知识
Sep 22 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
提高python代码运行效率的一些建议
Sep 29 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
基于python实现银行管理系统
Apr 20 Python
Pandas直接读取sql脚本的方法
Jan 21 #Python
python asyncio 协程库的使用
Jan 21 #Python
python palywright库基本使用
Jan 21 #Python
python Scrapy爬虫框架的使用
Jan 21 #Python
python 可视化库PyG2Plot的使用
Jan 21 #Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 #Python
Python实现石头剪刀布游戏
Jan 20 #Python
You might like
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
深入探究node之Transform
2017/07/20 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
Python中的自省(反射)详解
2015/06/02 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python实现二叉树的遍历
2017/12/11 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
讲座通知范文
2015/04/23 职场文书
2015年工程师工作总结
2015/04/30 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server