脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python3利用scapy局域网实现自动多线程arp扫描功能

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

2021-08-27 00:33Junе Python

这篇文章主要介绍了Python3利用scapy局域网实现自动多线程arp扫描功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、所需Python

  1. from scapy.all import *
  2. import threading

二、实现ip扫描

1.获取c段ip地址

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

  1. ARP().show()

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

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

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

2.arp扫描函数实现

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

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

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

  1. def ScanIp(ip):
  2. pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
  3. try:
  4. res=srp1(pkt,timeout=10,verbose=0)
  5. if res.psrc==ip:
  6. print(res.psrc)
  7. print(res.hwsrc)
  8. except:
  9. pass

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

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

尝试调用一下

  1. ScanIp('192.168.123.1')

现在看起来就很舒服

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

3.多线程

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

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

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

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

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

  1. from scapy.all import *
  2. import threading
  3.  
  4. tip=ARP().psrc
  5. tip=tip[:(len(tip)-tip[::-1].find('.'))]
  6.  
  7. def ScanIp(ip):
  8. pkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
  9. try:
  10. res=srp1(pkt,timeout=10,verbose=0)
  11. if res.psrc==ip:
  12. print('[+]'+res.psrc+' '+res.hwsrc)
  13. except:
  14. pass
  15.  
  16. if __name__=='__main__':
  17. print('IP MAC')
  18. for i in range(1,256):
  19. ip=tip+str(i)
  20. Go=threading.Thread(target=ScanIp,args=(ip,))
  21. Go.start()

运行效果

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

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

原文链接:https://blog.csdn.net/qq_40226096/article/details/112817637

延伸 · 阅读

精彩推荐