导入scapy版本2.4.0。我的项目只使用2.4.0版
import scapy.all as scapy
import sys
通过使用IP地址,此函数返回目标的相关MAC地址
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 sniff(interface):
scapy.sniff(iface=interface, store=False, prn=process_sniffed_packet)
此功能检查默认网关MAC地址是否等于我PC的MAC地址表。如果没有,它会说"+你正在遭受攻击!!“
def process_sniffed_packet(packet):
if packet.haslayer(scapy.ARP) and packet[scapy.ARP].op == 2:
count = 1
try:
real_mac = get_mac(packet[scapy.ARP].psrc)
response_mac = packet[scapy.ARP].hwsrc
if real_mac != response_mac:
count = count+1
print(str(count) + "[+] You are under attack!!")
sys.stdout.flush()
except IndexError:
pass
在Linux中,我们可以使用类似于'etho‘的值,但在windows中,我必须使用GUID值才能获得结果。我在Windows机器上运行这段代码。
sniff('{1619EEF1-4D71-4831-87AC-8E5DC3AA516A}')
但此代码返回错误
这就是引发的错误
raise ValueError("Unknown network interface %r" % name)
ValueError: Unknown network interface '{1619EEF1-4D71-4831-87AC-
8E5DC3AA516A}'
发布于 2019-03-11 06:45:46
在Windows上,您需要提供一个完整的接口名称/对象,以便能够对其进行嗅探。
首先,看看在Scapy shell中使用IFACES.show()
可以做些什么。
然后,要获得接口,您可以使用:
iface = IFACES.dev_from_name("...")
(或dev_from_pcapname
,dev_from_id
...查看帮助(IFACES)了解什么是available)然后通过sniff(iface=iface)
使用它。
您可以提供pcap_name,但不能提供GUID:例如,它应该类似于\\Device\\NPF_{...}
,而不仅仅是{...}
。
另外,请使用scapy 2.4.3rc1 (或至少2.4.2)来确保您是最新的
发布于 2020-05-18 10:54:49
我通过安装npcap解决了windows
上的scapy
错误ValueError: Unknown network interface
https://stackoverflow.com/questions/55075228
复制相似问题