cuốn sách gpt4 ai đã làm

c - Tại sao ping lại nhận được gói lệnh ping khác?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:56:37 27 4
mua khóa gpt4 Nike

Tôi đang tìm hiểu về cách triển khai ping trong C. Vấn đề là tôi đang sử dụng ổ cắm thô để nhận gói. Đối với tất cả các gói chúng tôi có Tiêu đề ICMP Có một giá trị nhận dạng trong .

Tôi chạy trong nhiều thiết bị đầu cuốiping.

Ví dụ: tôi chạy ba trong ba thiết bị đầu cuối ping google.com.

Giá trị nhận dạng của ping đầu tiên là 23456, giá trị nhận dạng của ping thứ hai là 34564 và giá trị nhận dạng của ping thứ ba là 98763.

Vấn đề của tôi là ping thứ hai phải nhận được ID là 34564 gói, nhưng nó nhận được giá trị ID là 23456.

Đối với mỗi ping, một ổ cắm thô mới đang được tạo. Nhưng nó nhận được một gói ping khác.

Có ai có thể giải thích tại sao nó lại nhận được gói ping khác không?

gia hạn: -

Tôi có một câu hỏi nữa. Câu hỏi là,

Ổ cắm thô đọc gói từ đâu và làm cách nào để xác định gói đó dành cho ổ cắm thô này?

Cập nhật 1: -

Đây là liên kết đến mã.

ping_common.c

ping.c

ping.h

câu trả lời hay nhất

Những gì bạn đang thấy là thiết kế của ổ cắm thô, vì ổ cắm thô được thiết kế để nhận tất cả các gói thô. Do đó, để chỉ nhận phản hồi cho một số gói ICMP nhất định, bạn cần áp dụng bộ lọc trên ổ cắm. Đầu tiên, bạn có thể sử dụng ICMP_FILTER Tùy chọn ổ cắm để hạn chế việc tiếp nhận một số loại ICMP nhất định:

bộ lọc cấu trúc icmp_filter;
filter.data = ;
setsockopt(sock, SOL_RAW, ICMP_FILTER, &filter, sizeof filter)

Thứ hai, bạn có thể đính kèm bộ lọc ổ cắm để buộc chỉ nhận các gói có ID ICMP nhất định:

bộ lọc struct sock_fprog;
// đặt bộ lọc để kiểm tra ID bằng ID của chính bạn
setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof filter);

Về c - tại sao ping nhận được gói lệnh ping khác? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/37044016/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress