Xây dựng các công cụ của riêng bạn

Bạn có thể sử dụng Scapy để làm công cụ tự động của riêng bạn. Bạn cũng có thể mở rộng Scapy mà không cần phải chỉnh sửa tập tin nguồn của nó.
Nếu bạn đã xây dựng một số công cụ thú vị, xin vui lòng đóng góp cho mailing-list!
Sử dụng Scapy trong các công cụ của bạn
Bạn có thể dễ dàng sử dụng Scapy trong các công cụ của riêng bạn. Chỉ cần nhập khẩu những gì bạn cần và làm điều đó.
Ví dụ đầu tiên này có một IP hoặc tên như là tham số đầu tiên, gửi một gói tin yêu cầu ICMP echo và hiển thị các gói trả lời lại hoàn toàn chia cắt:

#! /usr/bin/env python

import sys
from scapy.all import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()

Đây là một ví dụ phức tạp hơn mà không một ping ARP và báo cáo những gì nó tìm thấy với LaTeX Formating:

#! /usr/bin/env python
# arping2tex : arpings a network and outputs a LaTeX table as a result

import sys
if len(sys.argv) != 2:
    print "Usage: arping2tex <net>\n  eg: arping2tex 192.168.1.0/24"
    sys.exit(1)

from scapy.all import srp,Ether,ARP,conf
conf.verb=0
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=sys.argv[1]),
              timeout=2)

print r"\begin{tabular}{|l|l|}"
print r"\hline"
print r"MAC & IP\\"
print r"\hline"
for snd,rcv in ans:
    print rcv.sprintf(r"%Ether.src% & %ARP.psrc%\\")
print r"\hline"
print r"\end{tabular}"

Dưới đây là một công cụ liên tục sẽ giám sát tất cả các giao diện trên máy tính và in tất cả các yêu cầu ARP nó thấy, ngay cả trên 802,11 khung hình từ một card Wi-Fi ở chế độ màn hình. Lưu ý tham số cửa hàng = 0 để sniff () để tránh lưu trữ tất cả các gói dữ liệu trong bộ nhớ để không có gì

#! /usr/bin/env python
from scapy.all import *

def arp_monitor_callback(pkt):
    if ARP in pkt and pkt[ARP].op in (1,2): #who-has or is-at
        return pkt.sprintf("%ARP.hwsrc% %ARP.psrc%")

sniff(prn=arp_monitor_callback, filter="arp", store=0)

Đối với một ví dụ thực tế cuộc sống, bạn có thể kiểm tra Wifitap.

Mở rộng Scapy với add-ons
Nếu bạn cần thêm một số giao thức mới, chức năng mới, bất cứ điều gì, bạn có thể viết trực tiếp vào tập tin nguồn Scapy. Nhưng điều này không phải là rất thuận tiện. Ngay cả khi những thay đổi sẽ được tích hợp vào Scapy, nó có thể được thuận tiện hơn để viết chúng trong một file riêng biệt.
Một khi bạn đã làm điều đó, bạn có thể khởi chạy Scapy và nhập tập tin của bạn, nhưng điều này vẫn không phải là rất thuận tiện. Một cách khác để làm điều đó là để làm cho tập tin thực thi của bạn và có nó gọi hàm Scapy tên tương tác ():

#! /usr/bin/env python

# Set log level to benefit from Scapy warnings
import logging
logging.getLogger("scapy").setLevel(1)

from scapy.all import *

class Test(Packet):
    name = "Test packet"
    fields_desc = [ ShortField("test1", 1),
                    ShortField("test2", 2) ]

def make_test(x,y):
    return Ether()/IP()/Test(test1=x,test2=y)

if __name__ == "__main__":
    interact(mydict=globals(), mybanner="Test add-on v3.14")

Nếu bạn đặt đoạn mã trên trong file test_interact.py và làm cho nó thực thi, bạn sẽ nhận được:

# ./test_interact.py
Welcome to Scapy (0.9.17.109beta)
Test add-on v3.14
>>> make_test(42,666)
<Ether type=0x800 |<IP |<Test test1=42 test2=666 |>>>

Comments

Popular posts from this blog

Thiết lập card không dây trên Kali Linux

Monitor mode

Giới thiệu - Scapy