Làm cách nào để tạo gói UDP?


15

Khi tôi thực hiện lệnh Netcat sau đây và xem các gói với Wireshark , nó báo gói UDP không đúng.

$ echo "this is a test" | nc -u 127.0.0.1 53

Tương tự, sử dụng các lệnh như $ echo "this is a test" > /dev/udp/127.0.0.1/53tạo ra lỗi "gói không đúng định dạng" trong Wireshark.

Nhập mô tả hình ảnh ở đây

Lệnh echo được gửi / gửi đến máy chủ Netcat mà không gặp lỗi. Nhưng điều này khiến tôi băn khoăn: có thể tự xây dựng một gói UDP phù hợp với tiếng vang hoặc một số công cụ Unix gốc khác không?

Tôi đang sử dụng Debian và macOS.


10
Theo ảnh chụp màn hình của bạn, nó không phải là gói udp không đúng định dạng mà là nội dung của nó, vì cổng 53 được sử dụng cho DNS và gói của bạn không chứa yêu cầu DNS hợp lệ.
tkausl

@tkausl bạn hoàn toàn đúng. Không có lỗi "không đúng định dạng" khi sử dụng các cổng khác ngoài 53. Cảm ơn bạn đã chỉ ra điều đó.
user322500

1
Nếu bạn không sử dụng các giao thức chuẩn, bạn phải sử dụng các cổng trong phạm vi 49152 đến 65535. Vì Linux theo mặc định sử dụng phạm vi 32768 đến 60999 làm cổng phù du, tôi khuyên bạn không nên chọn các cổng đó cho các giao thức không chuẩn. Tuy nhiên, 61000 đến 65535 là trò chơi công bằng cho các giao thức không chuẩn. Tôi thường sử dụng echo $[61002+RANDOM%4532]để chọn một số cổng ngẫu nhiên trong phạm vi đó.
kasperd

1
Đừng đăng nhập với quyền root. Bạn nên thực hiện hầu hết các hoạt động của mình với tư cách là người dùng không root. Nếu bạn thực hiện công cụ với quyền root, bạn sẽ quay lại đây để hỏi cách khắc phục máy của bạn và chúng tôi sẽ không thể giúp bạn (ngoại trừ đề xuất cài đặt lại).
ctrl-alt-delor

1
@tkausl Hãy xem những gì bạn đã mất vì không đăng bình luận của bạn dưới dạng câu trả lời ....
George Vasiliou

Câu trả lời:


41

Gói của bạn là hoàn toàn hợp lệ, từ quan điểm của IP và UDP. Nếu bạn mở rộng chi tiết giao thức cho Ethernet / IP / UDP trong khung bên dưới của Wireshark, bạn sẽ thấy gói được phân tích thành công.

Tuy nhiên, vì được dành cho cổng 53, Wireshark cố gắng phân tích nó như một gói DNS, điều này không thể thực hiện được (vì chuỗi "đây là một thử nghiệm" không phải là yêu cầu DNS hợp lệ theo thông số RFC 1035 ).

Nếu bạn làm theo đặc tả tại liên kết đó, bạn sẽ có thể xây dựng một gói hợp lệ khi được phân tích cú pháp dưới dạng yêu cầu DNS. Nếu bạn gửi gói đến một cổng khác, bạn sẽ nhận thấy rằng Wireshark sẽ không còn phân tích nó như một yêu cầu DNS và do đó sẽ không hiển thị cảnh báo đó.


15

Bạn có thể gửi chúng cho Bash bí danh đặc biệt với chuyển hướng.

Từ trang Bash:

/ dev / tcp / host / port Nếu máy chủ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng hoặc tên dịch vụ số nguyên, bash sẽ cố gắng mở ổ cắm TCP tương ứng.

/ dev / udp / host / port Nếu máy chủ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng hoặc tên dịch vụ số nguyên, bash sẽ cố gắng mở ổ cắm UDP tương ứng.

Điều này sẽ gửi gói UDP tới 192.168.2.11 đến cổng 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080

Cảm ơn câu trả lời này. Tôi đã cập nhật câu hỏi của mình. Thật không may, sử dụng phương pháp của bạn cũng tạo ra một thông báo lỗi "gói không đúng định dạng".
user322500

-1

Có nhiều câu hỏi ở đây; yêu cầu của "gói không đúng định dạng" có thể là do giảm tải tổng kiểm tra và nếu đó là lỗi sai vì nó phản ánh việc bắt gói không có chế độ xem hoàn chỉnh - một số công việc thay vào đó được thực hiện trên phần cứng mạng. WireShark nên có tài liệu về điều này.

Mặt khác, các công cụ khác nhau (như socat, nchoặc netcat, hoặc thông qua các tính năng cực kỳ giống nhau trong các vỏ như ksh93, hoặcbash ) có thể lấy byte từ đầu vào tiêu chuẩn và chuyển chúng vào những gì trở thành gói UDP. Điều này có "phù hợp" hay không phụ thuộc vào giao thức; về mặt lý thuyết, người ta có thể xây dựng và gửi một gói DNS hoặc DHCP theo cách này, mặc dù mọi người thường sử dụng một thư viện hoặc phần mềm chuyên dụng (hy vọng) thực hiện đúng giao thức được đề cập, vì thường có liên quan nhiều hơn là đặt một vài bit vào phần thân của gói và gửi đi qua dây, đáng chú ý là xử lý các phản hồi, thử lại sau khi hết thời gian hoặc lỗi, các trường tiêu đề gói, v.v. Các giao thức thường được ghi lại rất rõ trong RFC hoặc xem loạt sách "TCP / IP Illustrated" bởi Stevens cho nhiều tài liệu hơn.

Các công cụ cụ thể như nmaplàm những việc rất tùy chỉnh với gói xây dựng. Mặt khác, đối với việc xây dựng gói thủ công, ngôn ngữ lập trình thường được sử dụng, mặc dù một lần nữa, hầu hết các phần mềm sẽ sử dụng các thư viện hoặc dịch vụ hệ thống hiện có để gửi DNS hoặc DHCP hoặc các gói UDP khác, vì chúng ít hoạt động hơn và ít bị lỗi hơn so với việc tạo thủ công thô gói từ đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.