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之一个免费的实验室
Sep 14 Python
浅谈五大Python Web框架
Mar 20 Python
Python中查看文件名和文件路径
Mar 31 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
python3.7.0的安装步骤
Aug 27 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python实现简单坦克大战
Mar 27 Python
python中如何进行连乘计算
May 28 Python
python中Django文件上传方法详解
Aug 05 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超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
js获取div高度的代码
2008/08/09 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
python 实现堆排序算法代码
2012/06/05 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python使用生成器实现可迭代对象
2018/03/20 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
pygame实现飞机大战
2020/03/11 Python
哪些是python中web开发框架
2020/06/17 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
反腐倡廉演讲稿
2014/05/22 职场文书
工地标语大全
2014/06/18 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
运动员入场前导词
2015/07/20 职场文书
学校隐患排查制度
2015/08/05 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS