【发布时间】:2019-07-31 04:41:11
【问题描述】:
导入 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}'
【问题讨论】: