Python3利用scapy局域網實現自動多線程arp掃描功能
一、所需Python庫
from scapy.all import * import threading
二、實現ip掃描
1.獲取c段ip地址
在ARP()裡面有ip地址,我們可以從裡面提取出前3段出來
ARP().show()
然後通過從後查找最後一個.得到最後一段位數,然後總長度-最後一段長度就能取出前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')
現在看起來就很舒服
3.多線程
現在我們隻需要循環一下c段ip然後用多線程跑起來就行瞭
for i in range(1,256): ip=tip+str(i) Go=threading.Thread(target=ScanIp,args=(ip,)) Go.start()
然後看一下效果好像不是我們想要的因為IP MAC輸出瞭很多次看起來很難受
然後這裡把輸出移動到函數外的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掃描功能的文章就介紹到這瞭,更多相關Python scapy實現arp掃描內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python使用scapy模塊實現ARP掃描的過程
- python使用scapy模塊實現ping掃描的過程詳解
- Python使用scapy模塊發包收包
- Python threading和Thread模塊及線程的實現
- 深入瞭解Python的多線程基礎