2013-06-20 33 views
8

Tôi đang cố gắng để hiểu làm thế nào nó có thể có thể bắt đầu nhiều quá trình lắng nghe trên cùng một cặp TCP {IP, Port} trên Windows XP.Nhiều quy trình nghe trên cùng một cổng?

Ví dụ: tôi có thể bắt đầu hai chương trình ncat.exe nghe trên cổng 371. Chương trình thứ hai được bắt đầu mà không gặp bất kỳ sự cố nào và nhận kết nối đến trong khi kết nối đầu tiên không. Một khi quá trình cuối cùng bắt đầu được chấm dứt, người đầu tiên nhận được chúng.

netstat -a -n | find "LISTENING" 
    TCP 0.0.0.0:371   0.0.0.0:0    LISTENING 
    TCP 0.0.0.0:371   0.0.0.0:0    LISTENING 

Giả sử hành vi Windows (XP) này, cách an toàn & hành vi an toàn là gì? Nó có nghĩa là người ta có thể "quá tải" bất kỳ cổng đã nghe nào thay vì nhận được thông báo lỗi "địa chỉ đã sử dụng" thông thường, và chỉ cần bỏ qua tường lửa với các quy tắc chỉ nói "bất kỳ kết nối TCP nào đến cổng 371 đều được cho phép".

+3

Đây không phải là 'hành vi an toàn và bảo mật'. Đây là một điều kỳ lạ của Windows cho phép các quá trình ăn cắp các kết nối của nhau. – EJP

Trả lời

9

Tùy chọn socket SO_REUSEADDR được diễn giải khác nhau trong cửa sổ, trong Linux, nó cho phép bạn sử dụng lại cùng một ổ cắm trừ khi tất cả năm bộ (src/dst port/ip và giao thức đều giống nhau).

Tuy nhiên, cửa sổ thực sự cho phép bạn lấy cắp ổ cắm. Tôi sẽ báo giá tốt hơn nhiều written answer ở đây để xây dựng cả hai.

Windows chỉ biết tùy chọn SO_REUSEADDR, không có SO_REUSEPORT. Đặt SO_REUSEADDR trên ổ cắm trong Windows hoạt động như thiết lập SO_REUSEPORT và SO_REUSEADDR trên ổ cắm trong BSD, với một ngoại lệ: Ổ cắm với SO_REUSEADDR luôn có thể kết nối chính xác cùng một địa chỉ và cổng như một ổ cắm đã bị ràng buộc, ngay cả khi các ổ cắm khác không có tùy chọn này được thiết lập khi nó bị ràng buộc. Hành vi này là hơi nguy hiểm vì nó cho phép ứng dụng * "ăn cắp" cổng được kết nối của một ứng dụng khác . Không cần phải nói, điều này có thể có các tác động bảo mật quan trọng đối với .

Các vấn đề liên quan