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 相关文章推荐
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Python每天必学之bytes字节
Jan 28 Python
python文件与目录操作实例详解
Feb 22 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
python的Tqdm模块的使用
Jan 10 Python
和孩子一起学习python之变量命名规则
May 27 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
实例介绍Python中整型
Feb 11 Python
Python中捕获键盘的方式详解
Mar 28 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
python中turtle库的简单使用教程
Nov 11 Python
Python函数调用追踪实现代码
Nov 27 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
Syphon 使用方法
2021/03/03 冲泡冲煮
PHP的FTP学习(三)
2006/10/09 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
Vuex之理解Store的用法
2017/04/19 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
新闻学毕业生自荐信
2013/11/15 职场文书
师德师风自查总结
2014/10/14 职场文书
工作年限证明模板
2014/11/01 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
聊聊redis-dump工具安装问题
2022/01/18 Redis