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下的Mysql模块MySQLdb安装详解
Apr 09 Python
Python计算程序运行时间的方法
Dec 13 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
基于Django与ajax之间的json传输方法
May 29 Python
python3实现随机数
Jun 25 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
使用Python对Dicom文件进行读取与写入的实现
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的autoload自动加载机制使用说明
2010/12/28 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JS交换变量的方法
2015/01/21 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
如何在django中实现分页功能
2020/04/22 Python
python 制作本地应用搜索工具
2021/02/27 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
小学生防溺水广播稿
2014/01/12 职场文书
大学军训感言200字
2014/02/26 职场文书
地球一小时宣传标语
2014/06/24 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书