Tôi đang cố gắng triển khai lỗ hổng lỗ TCP bằng các cửa sổ ổ cắm bằng cách sử dụng chuỗi công cụ mingw. Tôi nghĩ rằng quá trình này là đúng nhưng lỗ dường như không mất. Tôi đã sử dụng this làm tài liệu tham khảo.Cú đấm lỗ TCP
- Một và B kết nối đến máy chủ S
- S gửi đến Một, B 's bộ định tuyến IP + cảng nó được sử dụng để kết nối với S
- S làm tương tự cho B
- Một bắt đầu 2 chủ đề:
- Một cố gắng chủ đề kết nối đến router B 's với các thông tin gửi qua đường S
- Các chủ đề khác đang chờ đợi một kết nối đến cùng cổng dùng để kết nối đến router của nó khi nó kết nối với S
- B cũng làm như vậy
Tôi không có vấn đề trong các mã Tôi nghĩ rằng từ:
- Một và B không nhận được mỗi ip và cổng khác để sử dụng
- Cả hai đều nghe trên cổng mà họ đã sử dụng để kết nối với bộ định tuyến của họ khi họ liên hệ với máy chủ
- Cả hai đều kết nối với đúng ip và cổng nhưng hết thời gian chờ (mã lỗi
10060
)
Tôi đang thiếu gì đó?
EDIT: Với sự trợ giúp của trình khám phá quy trình, tôi thấy rằng một trong những khách hàng đã quản lý thiết lập kết nối với đồng đẳng. Nhưng các đồng đẳng dường như không xem xét kết nối được thực hiện.
Đây là những gì tôi đã chụp bằng Wireshark. Vì lợi ích của ví dụ, máy chủ S và máy khách A nằm trên cùng một máy tính. Máy chủ S nghe trên một cổng cụ thể (8060
) được chuyển hướng đến máy tính đó. B vẫn cố gắng kết nối trên IP đúng bởi vì nó thấy rằng địa chỉ công cộng của Một gửi bởi S là localhost
và do đó sử dụng địa chỉ IP công cộng của S để thay thế.(Tôi đã thay thế IP công cộng bởi placeholders)
EDIT 2: Tôi nghĩ rằng sự nhầm lẫn là do thực tế rằng cả hai dữ liệu yêu cầu kết nối đến và outcoming được chuyển vào cùng một cổng. Mà dường như làm rối loạn trạng thái kết nối vì chúng ta không biết socket nào sẽ lấy dữ liệu từ cổng. Nếu tôi báo msdn:
Tùy chọn ổ cắm
SO_REUSEADDR
cho phép ổ cắm buộc buộc phải kết nối với cổng đang sử dụng bởi ổ cắm khác. Ổ cắm thứ hai gọi setsockopt với tham số optname được đặt thànhSO_REUSEADDR
và thông số tham số được đặt thành giá trị boolean làTRUE
trước khi gọi ràng buộc trên cùng một cổng với ổ cắm gốc . Khi ổ cắm thứ hai đã kết nối thành công, hành vi đối với tất cả các ổ cắm bị ràng buộc với cổng đó là không xác định.
Nhưng nói trên cổng tương tự được yêu cầu của kỹ thuật TCP lỗ Dập để mở ra các lỗ!
Vì vậy, giải pháp cho lỗ hổng TCP của bạn là gì? Tôi quan tâm về điều này. – petersaints
Bạn có thể giải quyết vấn đề này và thực hiện cú đấm lỗ TCP không? – pkrish
@pkrish Tôi chỉ quản lý để bắt đầu Đồng thời TCP Open (xem bình luận về câu trả lời đã chọn) – Giann