Mục lục:

Netcat bằng Python: 6 bước
Netcat bằng Python: 6 bước

Video: Netcat bằng Python: 6 bước

Video: Netcat bằng Python: 6 bước
Video: [CTF] - PicoCTF: Số 10 - Nice Netcat 2024, Tháng bảy
Anonim
Netcat bằng Python
Netcat bằng Python

Netcat là gì? Trang hướng dẫn sử dụng cho netcat cho biết như sau: "tiện ích nc (hoặc netcat) được sử dụng cho mọi thứ liên quan đến ổ cắm miền TCP, UDP hoặc UNIX. Nó có thể mở kết nối TCP, gửi gói UDP, nghe tùy ý Cổng TCP và UDP, thực hiện quét cổng và xử lý cả IPv4 và IPv6. Không giống như telnet (1), các tập lệnh nc độc đáo và phân tách các thông báo lỗi thành lỗi tiêu chuẩn thay vì gửi chúng đến đầu ra tiêu chuẩn, như telnet (1) đã làm với một số"

Về bản chất, netcat cho phép bạn kết nối với các máy chủ khác bằng giao thức TCP hoặc UDP. TCP là viết tắt của Transmission Control Protocol, và là định hướng kết nối. UDP là viết tắt của Universal Datagram Protocol, và không có kết nối. TCP thường được sử dụng cho các ứng dụng internet, trong khi UDP được sử dụng cho phát trực tuyến phương tiện hoặc VPN.

Bước 1: Chúng ta bắt đầu như thế nào?

Chúng ta bắt đầu như thế nào?
Chúng ta bắt đầu như thế nào?

Trên đây là cách gọi của netcat. Bạn có thể thấy rằng có hai đối số ở cuối được gọi là "đích" và "cổng". Đích đề cập đến tên máy chủ hoặc địa chỉ ip của máy chủ mà chúng tôi đang cố gắng kết nối, trong khi cổng đề cập đến cổng của máy chủ mà chúng tôi đang cố gắng kết nối.

Bước 2: Bắt đầu

Hãy bắt đầu nào
Hãy bắt đầu nào

Trên đây là một số mã python bắt đầu. Như bạn có thể thấy, chúng tôi muốn xử lý các đối số cho chương trình tương tự như cách tiện ích thực sự làm. Tên máy chủ sẽ là đối số đầu tiên sau tên của tệp thực thi, trong khi cổng sẽ là đối số thứ hai sau tên của tệp thực thi trong dòng lệnh.

Bước 3: Tạo kết nối

Tạo kết nối
Tạo kết nối

Hãy tạo một hàm netcat mà chúng ta có thể sử dụng. Về cơ bản những gì chúng ta đang làm ở đây là tạo một ổ cắm và kết nối với máy chủ bằng cách sử dụng các thông số đã cho. Đối với lệnh netcat, các tham số hiện tại là tên máy chủ và cổng của máy chủ mà chúng tôi đang cố gắng kết nối. Ổ cắm chứa các tham số "socket. AF_INET" và "socket. SOCK_STREAM" vì chúng tôi đang đặt mặc định là kết nối TCP cho hướng dẫn này.

Bước 4: Cho phép gửi một số nội dung

Cho phép gửi một số nội dung
Cho phép gửi một số nội dung

Chúng tôi đã mở rộng hàm netcat của mình để nhận tham số thứ ba, "nội dung". Có rất nhiều nội dung ở đây vì vậy hãy chia nhỏ nó theo số dòng.

Dòng 14-16: chúng tôi gửi tất cả nội dung qua socket, chúng tôi đợi một chút và sau đó chúng tôi đóng socket đối với bất kỳ dữ liệu gửi đi nào để socket biết rằng không còn dữ liệu nào đến.

Dòng 18-26: chúng tôi tạo bộ đệm để lưu trữ phản hồi của máy chủ và trong khi ổ cắm đang nhận dữ liệu, chúng tôi nối tối đa 1024 byte dữ liệu vào kết quả miễn là có dữ liệu để đọc.

Dòng 28-29: chúng tôi muốn kết nối netcat này là kết nối một lần, vì vậy chúng tôi khai báo kết nối đóng và sau đó đóng kết nối.

Dòng 31: Đây là một yêu cầu HTTP tiêu chuẩn. Nếu bạn chạy mã với các đối số dòng lệnh "google.com" và "80", thì bạn sẽ thấy phản hồi HTTP thích hợp

Bước 5: Cho phép có một kết nối mở

Cho phép có một kết nối mở
Cho phép có một kết nối mở

Đoạn mã trên (nằm bên dưới mã từ phần trước) chỉ đơn giản là cho phép chúng ta chạy nhiều lệnh netcat qua một kết nối giả mở. (Trong thực tế, mỗi khi bạn chạy một lệnh, nó sẽ mở và sau đó đóng một kết nối TCP mới, vì vậy nó không thực sự mô phỏng hành vi của netcat, chúng tôi chỉ đơn giản làm điều này cho mục đích học tập). Cũng hãy chia nhỏ điều này theo từng dòng:

Dòng 31: Chúng tôi muốn đọc lệnh vô thời hạn để duy trì "tính tương tác"

Dòng 32: Đây là bộ đệm của chúng tôi sẽ lưu trữ nội dung yêu cầu của chúng tôi

Dòng 36-45: Chúng tôi sẽ đọc vào bộ đệm cho đến khi chúng tôi đọc một dòng trống

Dòng 48: chúng tôi chỉ cần gọi hàm netcat của mình bằng tên máy chủ, cổng và nội dung mới được tạo (được mã hóa đúng cách)

Dòng 50: nếu nội dung bộ đệm của chúng tôi từng chứa "Kết nối: Đóng" (cho biết chúng tôi muốn đóng kết nối), chúng tôi chỉ cần thoát ra khỏi vòng lặp

Bước 6: Kết luận

Ở phần cuối của hướng dẫn này, bạn sẽ có một triển khai netcat hoạt động tối thiểu. Tôi sẽ để nó như một bài tập cho người dùng để triển khai các tính năng như:

1. hỗ trợ các giao thức khác

2. sửa mã để không đóng kết nối mỗi lần

3. thêm cờ mà netcat đã có để sửa đổi hành vi

Đề xuất: