0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Khám Phá Thế Giới Gói Tin với Scapy: Hành Trình Cho Người Mới Bắt Đầu

Đăng vào 6 tháng trước

• 5 phút đọc

Chủ đề:

#beginners#network

Giới Thiệu

Trong thế giới mạng, việc hiểu cách các gói tin hoạt động là rất quan trọng. Nếu bạn như tôi, có thể bạn đã có một khái niệm lý thuyết về cách hoạt động của từng lớp trong mô hình mạng, nhưng thực tế thì vẫn còn mơ hồ. Đó là lý do tôi tìm đến một công cụ mạnh mẽ có tên là Scapy. Với Scapy, bạn có thể tạo gói tin, quan sát chúng, và theo dõi đường đi của chúng. Trong bài viết này, tôi sẽ chia sẻ những câu hỏi mà tôi đã có và những phát hiện thú vị mà tôi đã trải nghiệm khi làm việc với Scapy.

Scapy là gì?

Scapy là một thư viện thao tác gói tin trong Python. Với Scapy, bạn có thể:

  • Tạo gói tin
  • Gửi gói tin
  • Bắt (đọc) gói tin
  • Phân tích gói tin

Đây là một công cụ rất hữu ích cho các lập trình viên và các chuyên gia mạng.

Các lớp thường được sử dụng

  • IP() : Đầu gói IP
  • TCP() : Đầu gói TCP
  • UDP() : Đầu gói UDP
  • rdpcap() : Đọc tệp pcap
  • wrpcap() : Ghi tệp pcap

Lưu ý: Nếu bạn muốn xem gói tin với giao diện đồ họa, bạn có thể sử dụng công cụ Wireshark. Cả Scapy và Wireshark đều có khả năng đọc và ghi các tệp bắt gói (pcap).

1. Gói Tin là gì?

Gói tin, như tên gọi, giống như một bưu kiện nhỏ trên mạng - một mảnh nhỏ của thông tin. Dữ liệu lớn được chia thành các gói nhỏ và được gửi qua mạng. Dưới đây là tóm tắt mô hình tham chiếu OSI:

Tóm tắt mô hình OSI

  • Ethernet (L2): Nhãn địa chỉ của dịch vụ giao hàng trong một LAN (địa chỉ MAC)
  • IP (L3): Địa chỉ của thế giới Internet (địa chỉ IP)
  • TCP (L4): Quy tắc cho giao tiếp đáng tin cậy

Mô hình này giúp bạn hiểu rõ hơn về cách thức mà dữ liệu được truyền qua mạng từ thiết bị này sang thiết bị khác.

Phân tích Gói Tin

Scapy có thể tạo và phân tích các gói tin theo các tiêu chuẩn đã được IETF/IEEE định nghĩa. Sự hỗ trợ của Scapy cho các lớp như Ethernet, IP và TCP/UDP/ICMP là rất mạnh mẽ. Tuy nhiên, Scapy không mạnh trong việc hỗ trợ các lớp ứng dụng.

2. Gọi Gói Tin Ping với Scapy

Khi bạn muốn kiểm tra xem kết nối mạng có hoạt động hay không, lệnh Ping sẽ rất hữu ích. Hãy thử gửi một gói tin Ping sử dụng Scapy:

python Copy
from scapy.all import IP, ICMP, sr1

# Tạo một gói tin
pkt = IP(dst="8.8.8.8")/ICMP()

# Kiểm tra nội dung của gói tin
print("=== Gói Tin Được Gửi ===")
pkt.show()

# Gửi và đợi phản hồi
ans = sr1(pkt, timeout=2)

# Kiểm tra gói tin phản hồi
if ans:
    print("\n=== Gói Tin Phản Hồi ===")
    ans.show()
else:
    print("Không có phản hồi")

Giải thích Gói Tin

Gói tin gửi đi sẽ có các thông tin như địa chỉ IP nguồn và đích, và phản hồi sẽ cho bạn biết liệu kết nối có hoạt động hay không. Điều này giúp bạn xác nhận rằng mạng của bạn đang hoạt động tốt.

3. Traceroute với Scapy

Để xem đường đi của các gói tin, bạn có thể sử dụng chức năng traceroute() trong Scapy. Hãy thử với Google DNS:

python Copy
from scapy.all import traceroute
import socket

target = "8.8.8.8"

ans, unans = traceroute([target], maxttl=30, dport=80, retry=0, verbose=0)

print(f"=== Traceroute đến {target} ===")
for snd, rcv in ans:
    hop = snd.ttl
    ip = rcv.src
    try:
        host = socket.gethostbyaddr(ip)[0]
    except socket.herror:
        host = "?"
    print(f"{hop:2d}  {ip:15s}  {host}")

Phân Tích Đường Đi

Kết quả sẽ cho bạn thấy đường đi của gói tin từ máy tính của bạn tới Google DNS, cho thấy các bước mà gói tin đã qua. Điều này giúp bạn nắm bắt được cách thức mà dữ liệu di chuyển qua mạng.

4. Kiểm Tra Cổng Trên Máy Tính Của Bạn

Hãy thử quét cổng trên chính máy của bạn:

python Copy
from scapy.all import IP, TCP, sr

ip = "127.0.0.1"
ports = [22, 53, 80, 443, 3306]

ans, unans = sr(IP(dst=ip)/TCP(dport=ports, flags="S"), timeout=2, verbose=0)

for s, r in ans:
    if r.haslayer(TCP):
        if r[TCP].flags == "SA":
            print(f"Cổng {s[TCP].dport} đang MỞ")
        elif r[TCP].flags == "RA":
            print(f"Cổng {s[TCP].dport} đang ĐÓNG")

Quy Tắc Ra Quyết Định

  • Phản hồi với SYN+ACK → Cổng MỞ
  • Phản hồi với RST → Cổng ĐÓNG
  • Không có phản hồi → Bị chặn bởi tường lửa

5. Quét ARP để Phát Hiện LAN

ARP (Address Resolution Protocol) là cơ chế để hỏi trong một LAN về địa chỉ MAC của một địa chỉ IP:

python Copy
from scapy.all import ARP, Ether, srp

target = "172.19.32.0/20"
pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=target)
ans, _ = srp(pkt, timeout=2, verbose=0)
for _, r in ans:
    print(f"IP: {r.psrc}, MAC: {r.hwsrc}")

Tổng Kết

Scapy mở ra một thế giới mới cho việc phân tích và thao tác với gói tin. Việc hiểu rõ cách các gói tin hoạt động giúp cho việc phát triển ứng dụng và xử lý mạng trở nên dễ dàng hơn. Hãy thử sức với Scapy và khám phá thêm những điều thú vị trong thế giới gói tin!

Câu Hỏi Thường Gặp (FAQ)

1. Scapy có thể dùng để làm gì?
Scapy có thể được sử dụng để tạo, gửi, và phân tích các gói tin mạng, giúp bạn hiểu rõ hơn về cách thức hoạt động của mạng.

2. Có công cụ nào tương tự như Scapy không?
Công cụ Wireshark là một lựa chọn khác cho việc phân tích gói tin, nhưng không mạnh mẽ như Scapy trong việc tự động hóa và lập trình.

3. Scapy có miễn phí không?
Có, Scapy là một thư viện mã nguồn mở và hoàn toàn miễn phí để sử dụng.

4. Tôi có thể học Scapy ở đâu?
Có nhiều tài liệu và khóa học trực tuyến có sẵn để giúp bạn làm quen với Scapy.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào