Tôi đang viết Mô-đun hạt nhân sử dụng các móc nối Netfilter để sửa đổi một số thông tin tiêu đề TCP và rõ ràng, trước khi gửi, tôi muốn tính lại tổng kiểm tra.
Tôi cũng chỉnh sửa tiêu đề ở phía bên nhận, vì vậy tôi cũng cần phải tính toán lại nó ở đó.Cách tính tổng kiểm tra TCP
Tìm kiếm trực tuyến, tôi thấy một số người nói rằng tôi có thể đơn giản đặt thành 0 và nó sẽ được tính toán cho tôi, dường như điều đó không hiệu quả.
Tôi cũng đã tìm thấy chức năng này
tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
Mặc dù không ai giải thích cách này được sử dụng, và cho dù tôi thực sự có thể sử dụng nó ở việc tiếp nhận/gửi theo cùng một cách.
Nỗ lực của riêng tôi là đặt tổng kiểm tra thành 0 rồi gọi chức năng này qua skb tôi có và skb-> sk tôi có, vẫn không có gì.
Vì vậy, cách đơn giản để tính tổng kiểm tra dữ liệu TCP là gì?
gì Chính xác thì bạn thiết lập để 0 và nơi mà bạn đã mong đợi để tìm ra checksum? Nhìn vào mã, bạn nên đặt tcp_hdr (skb) -> check to 0, sau đó gọi hàm và sau đó checksum mới sẽ ở trong đó. – BjoernD
và đó là chính xác những gì tôi đã làm, nhưng tất cả các kết nối TCP chỉ đơn giản là không hoạt động khi tôi nạp các mô-đun. – Fingolfin
Có lẽ bạn nên thêm thẻ 'C' vào câu hỏi. Btw, hãy xem http://www.winpcap.org/pipermail/winpcap-users/2007-July/001984.html – Jite