1

我正在用 Ruby 创建一个简单的 Web 服务器,它在浏览器中显示文本 LOLZ。我现在有这个:

#!/usr/bin/ruby
require 'socket'

server = TCPServer.open(2000)
loop do

client = server.accept
client.puts "HTTP/1.1 200 OK\r\n"
client.puts "Content-type: text/plain\r\n"
client.puts "\r\n"
client.puts "LOLZ"
client.close

end

这按预期工作。但是,我希望它在端口 80 上工作。每当我将 2000 更改为 80,并使用 bash 启动服务器时,我都会收到此错误:

unknown-00-25-4b-8c-b9-b3:rServe koningbaardxiv$ ./rServe.rb
    ./rServe.rb:4:in `initialize': Permission denied - bind(2) (Errno::EACCES)
        from ./rServe.rb:4:in `open'
        from ./rServe.rb:4

谁能帮我?谢谢

编辑:我刚刚发现这适用于 0 到 999 范围内的所有端口:S

4

1 回答 1

4

1024 以下的端口是保留的(也称为知名端口)。您只能以 root 身份访问它们。

$ sudo ./rServe.rb

来自http://www.iana.org/assignments/port-numbers

端口号分为三个范围:众所周知的端口、注册的端口以及动态和/或专用端口。

众所周知的端口是从 0 到 1023 的端口。

来自http://www.linuxquestions.org/linux/articles/Technical/Why_can_only_root_listen_to_ports_below_1024

我不怪那些发明端口 1024 限制的人,考虑到 1970 年代和 1980 年代 UNIX 机器的使用方式,这是一个自然而重要的安全功能。典型的 UNIX 机器允许一群不一定完全信任的人登录并做事。您不希望这些不受信任的用户能够安装自定义守护程序,伪装成众所周知的服务,例如 telnet 或 ftp,因为它可能被用来窃取密码和其他讨厌的东西。

于 2009-12-18T12:43:36.160 回答