Khi cố gắng kết nối cổng 80 với ổ cắm trong c, tôi luôn gặp lỗi, rằng tôi không được phép sử dụng cổng này. có cách nào dễ dàng để nhận được sự cho phép này không?Ràng buộc ổ cắm vào cổng 80 trong ansi c
Trả lời
Thông thường chỉ siêu người dùng (gốc) mới có thể liên kết với các cổng 'đặc quyền' (tức là các số cổng dưới 1024).
Điều này có nghĩa là bạn phải chạy chương trình của bạn dưới dạng thư mục gốc hoặc thực thi 'suid root' của bạn.
Cả hai đều có hậu quả về bảo mật, do đó bạn có thể muốn xem xét sử dụng phương pháp suid và từ bỏ đặc quyền superuser sau khi thực hiện cuộc gọi liên kết.
Nếu bạn đang sử dụng hệ thống được chia sẻ (như máy tính đại học) và không phải root thì không có cách nào dễ dàng để có được sự cho phép đó, theo thiết kế.
Bạn sẽ tìm thấy this tutorial rất hữu ích về lập trình mạng với C/C++.
Và, nhân tiện, ANSI C không có cách nào để truy cập mạng. Đó là các thư viện được cung cấp bởi hệ điều hành (API socket BSD, cũng được chuyển đến Windows dưới dạng winsock
) cung cấp khả năng này.
Hướng dẫn của Beej về ổ cắm là những gì tôi đã học được lập trình socket tại trường đại học, cùng với các thế hệ của các sinh viên khoa học máy tính khác. Nó thật sự tốt. Ngoài ra, các tác phẩm của W. Richard Stevens là một hướng dẫn tốt trong không gian này. – ConcernedOfTunbridgeWells
Có, mặc dù phải mất ít thời gian hơn để đọc các hướng dẫn của Beej hơn là kinh nghiệm của Stevens :-) –
Nó cũng giống như @Charles Bailey đặt nó ... và tôi muốn thêm rằng đây là lý do tại sao một sử dụng để xem địa chỉ máy chủ http trên 8080 bởi đặc điểm kỹ thuật cổng trong URL như http://some.url: 8080/
Theo truyền thống chỉ gốc có thể liên kết ổ cắm với cổng dưới 1024.
Cổng 1024 và dưới đây được gọi là Cổng đặc quyền, ràng buộc với các cổng này đòi hỏi sự cho phép cao.
Các cổng trên 1024 được gọi là Cổng tạm thời. Việc liên kết với những yêu cầu này không yêu cầu quyền truy cập đặc biệt.
Cách dễ nhất để truy cập vào các cổng riêng tư là người dùng root.
Có, bạn có thể dễ dàng liên kết với cổng 80. Sử dụng Apache. Viết một ứng dụng web. Apache liên kết với cổng 80 và chạy ứng dụng web của bạn.
Bạn đang cố gắng viết Apache tiếp theo? Nếu có, bạn sẽ cần tìm hiểu về cuộc gọi API setuid trong hệ điều hành của mình.
Nếu bạn không viết phiên bản Apache mới, hầu hết mọi người đều sử dụng cổng không có đặc quyền. 8000 là phổ biến, như vậy là 8080.
Câu trả lời của S.Lott có thể đã gây ra phản ứng rất tiêu cực nhưng ý tưởng của ông là xa ngu ngốc: nếu câu hỏi ban đầu là một chương trình thực sự (không phải là bài tập ở trường), phát triển nó như một ứng dụng phía sau máy chủ HTTP thường là lựa chọn hợp lý. Bằng cách đó, bạn có thể để lại rất nhiều chi tiết cấp thấp cho một chương trình tốt và được gỡ lỗi tốt, Apache.
Ứng dụng không phải là CGI, nó có thể là một mô-đun Apache. Apache, từ phiên bản 2, không còn là máy chủ HTTP nữa. Nó bây giờ là một nền tảng để phát triển các chương trình mạng. Viết mô-đun Apache có thể là câu trả lời chính xác cho câu hỏi ban đầu (xem Apache documentation)
Cảm ơn bạn. Tôi mất một lúc để tìm hiểu * tại sao * có các cổng đặc quyền. Nó có liên quan đến kỳ vọng - bạn mong đợi giao thức http ở cổng 80, và đã có một phần mềm tốt đẹp để xử lý giao thức đó cho bạn. –
Các chương trình bình thường không thể kết nối các cổng "đặc quyền" - dưới 1024.Đây là một tính năng bảo mật chủ yếu là lỗi thời của các hệ điều hành giống UNIX.
Chạy với tư cách là superuser, mặc dù được nhiều người khác đề xuất ở đây, là một giải pháp tồi cho vấn đề này. Nếu bạn đang chạy trên hệ thống Debian hoặc Ubuntu, tôi khuyên bạn nên cài đặt gói authbind, cho phép bạn cấp quyền chương trình của bạn để mở cổng đặc quyền mà không cần phải cung cấp cho chương trình của bạn bất kỳ quyền đặc biệt nào khác.
Nếu bạn đang chạy trên bất kỳ hệ thống nào khác, tôi khuyên bạn nên cài đặt debian hoặc ubuntu ;-).
- 1. Các ổ cắm ràng buộc vào các địa chỉ IPv6
- 2. Ổ cắm Java - Cổng cục bộ
- 3. Nhiều kết nối trên cùng một ổ cắm cổng C++
- 4. Đóng ổ cắm TCP đang nghe trong C
- 5. Ràng buộc cổng Python
- 6. Ổ cắm thiết lập cổng số nguồn
- 7. Ràng buộc địa chỉ IPv6 vào ổ cắm Python làm địa chỉ IP nguồn
- 8. Sử dụng nhiều ràng buộc của Indy Server làm ổ cắm riêng biệt?
- 9. Node.js + Ổ cắm IO + Apache + PHP xóa cổng khỏi url?
- 10. Cổng Mochiweb 80
- 11. Làm thế nào để thiết lập cổng nguồn trong ổ cắm UDP trong c?
- 12. Ổ cắm thô trong Haskell
- 13. Chuyển tiếp cổng từ Cổng máy chủ 80 sang cổng VirtualBox 80 không hoạt động
- 14. Nhận cổng ngẫu nhiên cho ổ cắm UDP
- 15. Có thể tạo bao nhiêu ổ cắm từ cổng?
- 16. nginx không nghe cổng 80
- 17. Chạy Sinatra trên cổng 80
- 18. Ổ cắm nghe không unbind trong C + + theo linux
- 19. Có phải luôn luôn cần phải ràng buộc một ổ cắm?
- 20. Tomcat webapp trên cổng 80
- 21. Rebinding một cổng vào ổ cắm datagram trên một difftent IP
- 22. Ổ cắm Python +
- 23. Nhận cổng để sử dụng cho một ip đã cho trong ANSI C
- 24. Ổ cắm ICMP (linux)
- 25. Ổ cắm trong Rust
- 26. Tách một ổ cắm riêng khỏi ổ cắm của Boost.ASIO
- 27. Làm thế nào để phát hiện bằng cách sử dụng C# nếu một ổ đĩa được cắm vào cổng USB?
- 28. Việc đóng luồng đầu vào của ổ cắm cũng có đóng kết nối ổ cắm không?
- 29. Ổ cắm trong C#: Cách nhận luồng phản hồi?
- 30. Lỗi ổ cắm - đôi khi?
Các cổng 1024 và dưới đây thực sự được gọi là "cổng đặc quyền" không phải là "cổng an toàn", mọi thứ trên 1024 là "cổng tạm thời". Chúc mừng. – paxos1977